Skip to contentSkip to conversation

ntb_netdev: set the net_device's parent

PATCH In review Logan Gunthorpe 1 participant 4 messages Dec 9, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ntb_netdev: set the net_device's parent

At present, ntb_netdev devices end up under /sys/devices/virtual/net completely unconnected to the ntb trees below them. This patch sets the parent of the net_device (using SET_NETDEV_DEV) to the client_dev device. This results in a better connected sysfs path for the network device:

/sys/devices/pci0000:00/0000:00:03.0/0000:03:00.1/0000:03:00.1/ntb_netdev0/net/eth2

Cc Jon Mason <[email protected]>
Cc Dave Jiang <[email protected]>
Cc Allen Hubbe <[email protected]>
---
 drivers/net/ntb_netdev.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/net/ntb_netdev.c +2 -0
index 4daf3d0926a8..0250aa9ae2cb 100644
@@ -418,6 +418,8 @@ static int ntb_netdev_probe(struct device *client_dev)
 	if (!ndev)
 		return -ENOMEM;
 
+	SET_NETDEV_DEV(ndev, client_dev);
+
 	dev = netdev_priv(ndev);
 	dev->ndev = ndev;
 	dev->pdev = pdev;
Signature · 1 line
2.11.0
#1 lore raw

PATCH 1/1 ntb_transport: fix qp count bug

In cases where there are more mw's than spads/2-2, the mw count gets reduced to match the limitation. ntb_transport also tries to ensure that there are fewer qps than mws but uses the full mw count instead of the reduced one. When this happens, the math in 'ntb_transport_setup_qp_mw' will get confused and result in a kernel paging request bug.

This patch fixes the bug by reducing qp_count to the reduced mw count instead of the full mw count.

Cc Jon Mason <[email protected]>
Cc Dave Jiang <[email protected]>
Cc Allen Hubbe <[email protected]>
---
 drivers/ntb/ntb_transport.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/ntb/ntb_transport.c +2 -2
index 02ca45fdd892..0a778d2cab94 100644
@@ -1128,8 +1128,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev)
 	qp_count = ilog2(qp_bitmap);
 	if (max_num_clients && max_num_clients < qp_count)
 		qp_count = max_num_clients;
-	else if (mw_count < qp_count)
-		qp_count = mw_count;
+	else if (nt->mw_count < qp_count)
+		qp_count = nt->mw_count;
 
 	qp_bitmap &= BIT_ULL(qp_count) - 1;
 
Signature · 1 line
2.11.0
#2 lore raw

Re: [PATCH] ntb_transport: fix qp count bug

Sorry, ignore this. I sent an old patch.

Logan

Quoted 34 lines · Logan Gunthorpe

In cases where there are more mw's than spads/2-2, the mw count gets reduced to match the limitation. ntb_transport also tries to ensure that there are fewer qps than mws but uses the full mw count instead of the reduced one. When this happens, the math in 'ntb_transport_setup_qp_mw' will get confused and result in a kernel paging request bug.

This patch fixes the bug by reducing qp_count to the reduced mw count instead of the full mw count.

Cc Jon Mason <[email protected]>
Cc Dave Jiang <[email protected]>
Cc Allen Hubbe <[email protected]>
---
  drivers/ntb/ntb_transport.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)
drivers/ntb/ntb_transport.c +2 -2
index 02ca45fdd892..0a778d2cab94 100644
@@ -1128,8 +1128,8 @@ static int ntb_transport_probe(struct ntb_client *self, struct ntb_dev *ndev)
  	qp_count = ilog2(qp_bitmap);
  	if (max_num_clients && max_num_clients < qp_count)
  		qp_count = max_num_clients;
-	else if (mw_count < qp_count)
-		qp_count = mw_count;
+	else if (nt->mw_count < qp_count)
+		qp_count = nt->mw_count;
 
  	qp_bitmap &= BIT_ULL(qp_count) - 1;
 
#3 lore raw
In reply to Logan Gunthorpe

Sorry ignore this. I sent an old patch :(

Logan

Quoted 30 lines · Logan Gunthorpe

At present, ntb_netdev devices end up under /sys/devices/virtual/net completely unconnected to the ntb trees below them. This patch sets the parent of the net_device (using SET_NETDEV_DEV) to the client_dev device. This results in a better connected sysfs path for the network device:

/sys/devices/pci0000:00/0000:00:03.0/0000:03:00.1/0000:03:00.1/ntb_netdev0/net/eth2

Cc Jon Mason <[email protected]>
Cc Dave Jiang <[email protected]>
Cc Allen Hubbe <[email protected]>
---
  drivers/net/ntb_netdev.c | 2 ++
  1 file changed, 2 insertions(+)
drivers/net/ntb_netdev.c +2 -0
index 4daf3d0926a8..0250aa9ae2cb 100644
@@ -418,6 +418,8 @@ static int ntb_netdev_probe(struct device *client_dev)
  	if (!ndev)
  		return -ENOMEM;
 
+	SET_NETDEV_DEV(ndev, client_dev);
+
  	dev = netdev_priv(ndev);
  	dev->ndev = ndev;
  	dev->pdev = pdev;