Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934461AbcKPPWd (ORCPT ); Wed, 16 Nov 2016 10:22:33 -0500 Received: from hqemgate14.nvidia.com ([216.228.121.143]:11329 "EHLO hqemgate14.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934324AbcKPPW3 (ORCPT ); Wed, 16 Nov 2016 10:22:29 -0500 X-PGP-Universal: processed; by hqnvupgp07.nvidia.com on Tue, 15 Nov 2016 19:21:21 -0800 Subject: Re: [PATCH v13 12/22] vfio: Add notifier callback to parent's ops structure of mdev To: , , , , , , , , , 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> From: Kirti Wankhede X-Nvconfidentiality: public Message-ID: Date: Wed, 16 Nov 2016 20:47:18 +0530 MIME-Version: 1.0 In-Reply-To: <20161116063759.GD5531@bjsdjshi@linux.vnet.ibm.com> X-Originating-IP: [10.24.216.210] X-ClientProxiedBy: DRHKMAIL103.nvidia.com (10.25.59.17) To bgmail102.nvidia.com (10.25.59.11) Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1771 Lines: 54 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