lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20161107165119.3d064f9d@t450s.home>
Date:   Mon, 7 Nov 2016 16:51:19 -0700
From:   Alex Williamson <alex.williamson@...hat.com>
To:     Kirti Wankhede <kwankhede@...dia.com>
Cc:     <pbonzini@...hat.com>, <kraxel@...hat.com>, <cjia@...dia.com>,
        <qemu-devel@...gnu.org>, <kvm@...r.kernel.org>,
        <kevin.tian@...el.com>, <jike.song@...el.com>,
        <bjsdjshi@...ux.vnet.ibm.com>, <linux-kernel@...r.kernel.org>
Subject: Re: [PATCH v11 12/22] vfio: Add notifier callback to parent's ops
 structure of mdev

On Sat, 5 Nov 2016 02:40:46 +0530
Kirti Wankhede <kwankhede@...dia.com> wrote:

> Add a notifier calback to parent's ops structure of mdev device so that per
> device notifer for vfio module is registered through vfio_mdev module.
> 
> Signed-off-by: Kirti Wankhede <kwankhede@...dia.com>
> Signed-off-by: Neo Jia <cjia@...dia.com>
> Change-Id: Iafa6f1721aecdd6e50eb93b153b5621e6d29b637
> ---
>  drivers/vfio/mdev/vfio_mdev.c | 19 +++++++++++++++++++
>  include/linux/mdev.h          |  9 +++++++++
>  2 files changed, 28 insertions(+)
> 
> diff --git a/drivers/vfio/mdev/vfio_mdev.c b/drivers/vfio/mdev/vfio_mdev.c
> index bb534d19e321..2b7c24aa9e46 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;
> @@ -40,6 +49,11 @@ static int vfio_mdev_open(void *device_data)
>  	if (ret)
>  		module_put(THIS_MODULE);
>  
> +	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");
> +	}
>  	return ret;
>  }
>  
> @@ -48,6 +62,11 @@ static void vfio_mdev_release(void *device_data)
>  	struct mdev_device *mdev = device_data;
>  	struct parent_device *parent = mdev->parent;
>  
> +	if (likely(parent->ops->notifier)) {
> +		if (vfio_unregister_notifier(&mdev->dev, &mdev->nb))
> +			pr_err("Failed to unregister notifier for mdev\n");
> +	}
> +

Ok, I guess this is sufficient to automatically handle the unregister
at the mdev layer.  No need for my comments on the previous other
than the ordering of when the callback is called.  Thanks,

Alex

>  	if (likely(parent->ops->release))
>  		parent->ops->release(mdev);
>  
> diff --git a/include/linux/mdev.h b/include/linux/mdev.h
> index 0352febc1944..2999ef0ddaed 100644
> --- a/include/linux/mdev.h
> +++ b/include/linux/mdev.h
> @@ -37,6 +37,7 @@ struct mdev_device {
>  	struct kref		ref;
>  	struct list_head	next;
>  	struct kobject		*type_kobj;
> +	struct notifier_block	nb;
>  };
>  
>  
> @@ -84,6 +85,12 @@ struct mdev_device {
>   *			@cmd: mediated device structure
>   *			@arg: mediated device structure
>   * @mmap:		mmap callback
> + *			@mdev: mediated device structure
> + *			@vma: vma structure
> + * @notifer:		Notifier callback
> + *			@mdev: mediated device structure
> + *			@action: Action for which notifier is called
> + *			@data: Data associated with the notifier
>   * Parent device that support mediated device should be registered with mdev
>   * module with parent_ops structure.
>   **/
> @@ -105,6 +112,8 @@ struct parent_ops {
>  	ssize_t (*ioctl)(struct mdev_device *mdev, unsigned int cmd,
>  			 unsigned long arg);
>  	int	(*mmap)(struct mdev_device *mdev, struct vm_area_struct *vma);
> +	int	(*notifier)(struct mdev_device *mdev, unsigned long action,
> +			    void *data);
>  };
>  
>  /* interface for exporting mdev supported type attributes */

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ