summaryrefslogtreecommitdiffstats
path: root/drivers/misc/mic/scif/scif_peer_bus.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/mic/scif/scif_peer_bus.c')
-rw-r--r--drivers/misc/mic/scif/scif_peer_bus.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/misc/mic/scif/scif_peer_bus.c b/drivers/misc/mic/scif/scif_peer_bus.c
index 547bf7bdd5c2..6ffa3bdbd45b 100644
--- a/drivers/misc/mic/scif/scif_peer_bus.c
+++ b/drivers/misc/mic/scif/scif_peer_bus.c
@@ -72,6 +72,7 @@ err:
static int scif_peer_add_device(struct scif_dev *scifdev)
{
struct scif_peer_dev *spdev = rcu_dereference(scifdev->spdev);
+ char pool_name[16];
int ret;
ret = device_add(&spdev->dev);
@@ -81,8 +82,21 @@ static int scif_peer_add_device(struct scif_dev *scifdev)
"dnode %d: peer device_add failed\n", scifdev->node);
goto put_spdev;
}
+
+ scnprintf(pool_name, sizeof(pool_name), "scif-%d", spdev->dnode);
+ scifdev->signal_pool = dmam_pool_create(pool_name, &scifdev->sdev->dev,
+ sizeof(struct scif_status), 1,
+ 0);
+ if (!scifdev->signal_pool) {
+ dev_err(&scifdev->sdev->dev,
+ "dnode %d: dmam_pool_create failed\n", scifdev->node);
+ ret = -ENOMEM;
+ goto del_spdev;
+ }
dev_dbg(&spdev->dev, "Added peer dnode %d\n", spdev->dnode);
return 0;
+del_spdev:
+ device_del(&spdev->dev);
put_spdev:
RCU_INIT_POINTER(scifdev->spdev, NULL);
synchronize_rcu();