Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed6f653f authored by Dean Luick's avatar Dean Luick Committed by Doug Ledford
Browse files

staging/rdma/hfi1: Fix debugfs access race



Debugfs access races with the driver being ready.  Make sure the
driver is ready before debugfs files appear and debufs files are
gone before the driver starts tearing down.

Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDean Luick <dean.luick@intel.com>
Signed-off-by: default avatarJubin John <jubin.john@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent e8aa284b
Loading
Loading
Loading
Loading
+6 −3
Original line number Original line Diff line number Diff line
@@ -983,7 +983,6 @@ void hfi1_free_devdata(struct hfi1_devdata *dd)
	list_del(&dd->list);
	list_del(&dd->list);
	spin_unlock_irqrestore(&hfi1_devs_lock, flags);
	spin_unlock_irqrestore(&hfi1_devs_lock, flags);
	free_platform_config(dd);
	free_platform_config(dd);
	hfi1_dbg_ibdev_exit(&dd->verbs_dev);
	rcu_barrier(); /* wait for rcu callbacks to complete */
	rcu_barrier(); /* wait for rcu callbacks to complete */
	free_percpu(dd->int_counter);
	free_percpu(dd->int_counter);
	free_percpu(dd->rcv_limit);
	free_percpu(dd->rcv_limit);
@@ -1088,7 +1087,6 @@ struct hfi1_devdata *hfi1_alloc_devdata(struct pci_dev *pdev, size_t extra)
			&pdev->dev,
			&pdev->dev,
			"Could not alloc cpulist info, cpu affinity might be wrong\n");
			"Could not alloc cpulist info, cpu affinity might be wrong\n");
	}
	}
	hfi1_dbg_ibdev_init(&dd->verbs_dev);
	return dd;
	return dd;


bail:
bail:
@@ -1445,8 +1443,11 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
	 * we still create devices, so diags, etc. can be used
	 * we still create devices, so diags, etc. can be used
	 * to determine cause of problem.
	 * to determine cause of problem.
	 */
	 */
	if (!initfail && !ret)
	if (!initfail && !ret) {
		dd->flags |= HFI1_INITTED;
		dd->flags |= HFI1_INITTED;
		/* create debufs files after init and ib register */
		hfi1_dbg_ibdev_init(&dd->verbs_dev);
	}


	j = hfi1_device_create(dd);
	j = hfi1_device_create(dd);
	if (j)
	if (j)
@@ -1487,6 +1488,8 @@ static void remove_one(struct pci_dev *pdev)
{
{
	struct hfi1_devdata *dd = pci_get_drvdata(pdev);
	struct hfi1_devdata *dd = pci_get_drvdata(pdev);


	/* close debugfs files before ib unregister */
	hfi1_dbg_ibdev_exit(&dd->verbs_dev);
	/* unregister from IB core */
	/* unregister from IB core */
	hfi1_unregister_ib_device(dd);
	hfi1_unregister_ib_device(dd);