[PATCH] drm/i915/gvt: Introduce vGPU mm notifier

Zhenyu Wang zhenyuw at linux.intel.com
Mon Apr 24 02:50:10 UTC 2017


On 2017.04.21 23:32:28 +0800, Zhi Wang wrote:
> This patch introduces vGPU mm notifier for clients who may wish to track
> guest changing its graphics memory mapping in a vGPU GGTT/PPGTT mm.
> 
> Signed-off-by: Zhi Wang <zhi.a.wang at intel.com>
> ---

We might wait to merge this until real user will be ready.

> +
> +/**
> + * intel_vgpu_activate_mm_notifier - activate a vGPU mm notifier
> + * @n: a vGPU mm notifier
> + *
> + * This function is used to start tracking the GMADR mapping change.
> + *
> + * Returns:
> + * Zero on success, negative error code in pointer if failed.
> + */
> +int intel_vgpu_activate_mm_notifier(struct intel_vgpu_mm_notifier *n)
> +{
> +	if (n->active)
> +		return -EEXIST;
> +
> +	n->active = true;
> +	interval_tree_insert(&n->node, &n->mm->mm_notifiers);
> +
> +	return 0;
> +}

I think you should add start/last setting here for this notifier
instead of leaving out to caller, which will be consistent then.

> +
> +/**
> + * intel_vgpu_deactivate_mm_notifier - de-activate a vGPU mm notifier
> + * @n: a vGPU mm notifier
> + *
> + * This function is used to stop tracking the GMADR mapping change. If a
> + * client wish to modify the tracking range, it has to stop the tracking
> + * first and then start the tracking again after modifying the range.
> + *
> + */
> +void intel_vgpu_deactivate_notifier(struct intel_vgpu_mm_notifier *n)
> +{
> +	interval_tree_remove(&n->node, &n->mm->mm_notifiers);
> +	n->active = false;
> +}
> diff --git a/drivers/gpu/drm/i915/gvt/gtt.h b/drivers/gpu/drm/i915/gvt/gtt.h
> index f88eb5e..95cfe7b 100644
> --- a/drivers/gpu/drm/i915/gvt/gtt.h
> +++ b/drivers/gpu/drm/i915/gvt/gtt.h
> @@ -121,6 +121,18 @@ typedef enum {
>  	GTT_TYPE_MAX,
>  } intel_gvt_gtt_type_t;
>  
> +struct intel_vgpu_mm_notifier {
> +	bool active;
> +
> +	struct intel_vgpu_mm *mm;
> +	int (*mapping_change)(struct intel_vgpu_mm_notifier *, u64, u64);
> +	struct interval_tree_node node;
> +};
> +
> +extern int intel_vgpu_activate_mm_notifier(struct intel_vgpu_mm_notifier *n);
> +
> +extern void intel_vgpu_deactivate_mm_notifier(struct intel_vgpu_mm_notifier *n);
> +
>  struct intel_vgpu_mm {
>  	int type;
>  	bool initialized;
> @@ -141,6 +153,7 @@ struct intel_vgpu_mm {
>  	atomic_t pincount;
>  	struct list_head lru_list;
>  	struct intel_vgpu *vgpu;
> +	struct rb_root mm_notifiers;
>  };

You also need to handle notifier tree cleanup when vgpu mm destroy.

>  
>  extern struct intel_gvt_gtt_entry *intel_vgpu_mm_get_entry(
> diff --git a/drivers/gpu/drm/i915/gvt/gvt.h b/drivers/gpu/drm/i915/gvt/gvt.h
> index becae2f..b3629404 100644
> --- a/drivers/gpu/drm/i915/gvt/gvt.h
> +++ b/drivers/gpu/drm/i915/gvt/gvt.h
> @@ -33,6 +33,8 @@
>  #ifndef _GVT_H_
>  #define _GVT_H_
>  
> +#include <linux/interval_tree.h>
> +
>  #include "debug.h"
>  #include "hypercall.h"
>  #include "mmio.h"
> -- 
> 2.7.4
> 
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gvt-dev/attachments/20170424/6b6e0fa6/attachment.sig>


More information about the intel-gvt-dev mailing list