From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kirti Wankhede Subject: Re: [PATCH v13 12/22] vfio: Add notifier callback to parent's ops structure of mdev Date: Wed, 16 Nov 2016 20:47:18 +0530 Message-ID: References: <1479223805-22895-1-git-send-email-kwankhede@nvidia.com> <1479223805-22895-13-git-send-email-kwankhede@nvidia.com> <20161116063759.GD5531@bjsdjshi@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit To: , , , , , , , , , Return-path: In-Reply-To: <20161116063759.GD5531@bjsdjshi@linux.vnet.ibm.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 11/16/2016 12:07 PM, Dong Jia Shi wrote: > * Kirti Wankhede [2016-11-15 20:59:55 +0530]: > > Hi Kirti, > > [...] > >> diff --git a/drivers/vfio/mdev/vfio_mdev.c b/drivers/vfio/mdev/vfio_mdev.c >> index ffc36758cb84..4fc63db38829 100644 >> --- a/drivers/vfio/mdev/vfio_mdev.c >> +++ b/drivers/vfio/mdev/vfio_mdev.c >> @@ -24,6 +24,15 @@ >> #define DRIVER_AUTHOR "NVIDIA Corporation" >> #define DRIVER_DESC "VFIO based driver for Mediated device" >> >> +static int vfio_mdev_notifier(struct notifier_block *nb, unsigned long action, >> + void *data) >> +{ >> + struct mdev_device *mdev = container_of(nb, struct mdev_device, nb); >> + struct parent_device *parent = mdev->parent; >> + >> + return parent->ops->notifier(mdev, action, data); >> +} >> + >> static int vfio_mdev_open(void *device_data) >> { >> struct mdev_device *mdev = device_data; >> @@ -36,9 +45,18 @@ static int vfio_mdev_open(void *device_data) >> if (!try_module_get(THIS_MODULE)) >> return -ENODEV; >> >> + if (likely(parent->ops->notifier)) { >> + mdev->nb.notifier_call = vfio_mdev_notifier; >> + if (vfio_register_notifier(&mdev->dev, &mdev->nb)) >> + pr_err("Failed to register notifier for mdev\n"); > I think we should just return here if the error value is not -ENOTTY. > It might be the case where iommu backend module might not support .register_notifier(). In that case vfio_register_notifier() returns -ENOTTY and that should not fail this open() call Changing it to: ret = vfio_register_notifier(&mdev->dev, &mdev->nb); if (ret && (ret != -ENOTTY)) { pr_err("Failed to register notifier for mdev\n"); module_put(THIS_MODULE); return ret; } Thanks, Kirti