diff options
Diffstat (limited to 'drivers/misc/mic/scif/scif_peer_bus.c')
-rw-r--r-- | drivers/misc/mic/scif/scif_peer_bus.c | 14 |
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(); |