Re: [Intel-gfx] [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED

2014-11-30 Thread Cheng, Yao
Add Jon/Bob/Raf for detail review.
 -Original Message-
 From: dri-devel [mailto:dri-devel-boun...@lists.freedesktop.org] On Behalf
 Of Cheng, Yao
 Sent: Thursday, November 27, 2014 19:49
 To: intel-gfx@lists.freedesktop.org; dri-de...@lists.freedesktop.org;
 daniel.vet...@ffwll.ch; Kelley, Sean V; Chehab, John
 Cc: emil.l.veli...@gmail.com; Jiang, Fei
 Subject: RE: [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED
 
  -Original Message-
  From: Cheng, Yao
  Sent: Saturday, November 22, 2014 3:07
  To: intel-gfx@lists.freedesktop.org; dri-de...@lists.freedesktop.org;
  daniel.vet...@ffwll.ch; Kelley, Sean V; Chehab, John
  Cc: Jiang, Fei; dh.herrm...@gmail.com; jani.nik...@linux.intel.com;
  emil.l.veli...@gmail.com; ville.syrj...@linux.intel.com;
  jbar...@virtuousgeek.org; dan...@fooishbar.org; Cheng, Yao
  Subject: [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED
  +typedef struct drm_ipvr_private {
  +   struct drm_device *dev;
  +   struct pci_dev *pci_root;
  +
  +   /* IMG video context */
  +   struct list_head ipvr_ctx_list;
 
 The current design leads to ctx leak. There's no ctx_list for each file 
 struct, so
 each create_context_ioctl causes one ctx leak.
 Need to move the ctx_list from dev_private to file_private.
 
  +   spinlock_t ipvr_ctx_lock;
  +   struct idr ipvr_ctx_idr;
  +   struct ipvr_context default_ctx;
  +
  +   /* PM related */
  +   atomic_t pending_events;
  +
  +   /* exec related */
  +   struct ipvr_validate_context validate_ctx;
  +
  +   /* IMG MMU specific */
  +   struct ipvr_mmu_driver *mmu;
  +   /*struct ipvr_mmu_pd *pf_pd;*/
  +   atomic_t ipvr_mmu_invaldc;
  +
  +   /* GEM mm related */
  +   struct ipvr_gem_stat ipvr_stat;
  +   struct kmem_cache *ipvr_bo_slab;
  +   struct ipvr_address_space addr_space;
  +
  +   /* fence related */
  +   u32 last_seq;
  +   wait_queue_head_t fence_queue;
  +   struct ipvr_fence_driver fence_drv;
  +
  +   /* MMIO window shared from parent device */
  +   u8 __iomem* reg_base;
  +
  +   /*
  +* VED specific
  +*/
  +   struct ved_private *ved_private;
  +}drm_ipvr_private_t;
 ___
 dri-devel mailing list
 dri-de...@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/dri-devel
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED

2014-11-27 Thread Cheng, Yao
 -Original Message-
 From: Cheng, Yao
 Sent: Saturday, November 22, 2014 3:07
 To: intel-gfx@lists.freedesktop.org; dri-de...@lists.freedesktop.org;
 daniel.vet...@ffwll.ch; Kelley, Sean V; Chehab, John
 Cc: Jiang, Fei; dh.herrm...@gmail.com; jani.nik...@linux.intel.com;
 emil.l.veli...@gmail.com; ville.syrj...@linux.intel.com;
 jbar...@virtuousgeek.org; dan...@fooishbar.org; Cheng, Yao
 Subject: [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED
 +typedef struct drm_ipvr_private {
 + struct drm_device *dev;
 + struct pci_dev *pci_root;
 +
 + /* IMG video context */
 + struct list_head ipvr_ctx_list;

The current design leads to ctx leak. There's no ctx_list for each file struct, 
so each create_context_ioctl causes one ctx leak.
Need to move the ctx_list from dev_private to file_private.

 + spinlock_t ipvr_ctx_lock;
 + struct idr ipvr_ctx_idr;
 + struct ipvr_context default_ctx;
 +
 + /* PM related */
 + atomic_t pending_events;
 +
 + /* exec related */
 + struct ipvr_validate_context validate_ctx;
 +
 + /* IMG MMU specific */
 + struct ipvr_mmu_driver *mmu;
 + /*struct ipvr_mmu_pd *pf_pd;*/
 + atomic_t ipvr_mmu_invaldc;
 +
 + /* GEM mm related */
 + struct ipvr_gem_stat ipvr_stat;
 + struct kmem_cache *ipvr_bo_slab;
 + struct ipvr_address_space addr_space;
 +
 + /* fence related */
 + u32 last_seq;
 + wait_queue_head_t fence_queue;
 + struct ipvr_fence_driver fence_drv;
 +
 + /* MMIO window shared from parent device */
 + u8 __iomem* reg_base;
 +
 + /*
 +  * VED specific
 +  */
 + struct ved_private *ved_private;
 +}drm_ipvr_private_t;
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED

2014-11-26 Thread Cheng, Yao
 -Original Message-
 From: Cheng, Yao
 Sent: Saturday, November 22, 2014 3:07
 To: intel-gfx@lists.freedesktop.org; dri-de...@lists.freedesktop.org;
 daniel.vet...@ffwll.ch; Kelley, Sean V; Chehab, John
 Cc: Jiang, Fei; dh.herrm...@gmail.com; jani.nik...@linux.intel.com;
 emil.l.veli...@gmail.com; ville.syrj...@linux.intel.com;
 jbar...@virtuousgeek.org; dan...@fooishbar.org; Cheng, Yao
 Subject: [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED
 
 +static void
 +ipvr_drm_preclose(struct drm_device *dev, struct drm_file *file_priv)
 +{
 + /* if user didn't destory ctx explicitly, remove ctx here */
 + struct drm_ipvr_private *dev_priv;
 + struct drm_ipvr_file_private *ipvr_fpriv;
 + struct ved_private *ved_priv;
 + struct ipvr_context *ipvr_ctx  = NULL;
 + unsigned long irq_flags;
 +
 + IPVR_DEBUG_ENTRY(enter\n);
 + dev_priv = dev-dev_private;
 + ipvr_fpriv = file_priv-driver_priv;
 + ved_priv = dev_priv-ved_private;
 +
 + if (ipvr_fpriv-ctx_id == IPVR_CONTEXT_INVALID_ID)
 + return;
 + ipvr_ctx = (struct ipvr_context *)
 + idr_find(dev_priv-ipvr_ctx_idr, ipvr_fpriv-ctx_id);

Need protection on ipvr_ctx_idr. Same to the other idr related code.

 + if (!ipvr_ctx  || (ipvr_ctx-ipvr_fpriv != ipvr_fpriv)) {
 + IPVR_DEBUG_GENERAL(ctx for id %d has already
 destroyed\n,
 + ipvr_fpriv-ctx_id);
 + return;
 + }
 +
 + /**
 +  * fixme: remove this work-around (WA the issue that calling
 +  * close() with queued cmd might cause state machine issue).
 +  * we should wait for only the cmds sent from contexts in this file
 +  * instead of all cmds
 +  */
 + ipvr_fence_wait_empty_locked(dev_priv);
 +
 + IPVR_DEBUG_PM(Video:remove context type 0x%x\n, ipvr_ctx-
 ctx_type);
 + mutex_lock(ved_priv-ved_mutex);
 + if (ved_priv-ipvr_ctx == ipvr_ctx )
 + ved_priv-ipvr_ctx = NULL;
 + mutex_unlock(ved_priv-ved_mutex);
 +
 + spin_lock_irqsave(dev_priv-ipvr_ctx_lock, irq_flags);
 + list_del(ipvr_ctx-head);
 + ipvr_fpriv-ctx_id = IPVR_CONTEXT_INVALID_ID;
 + spin_unlock_irqrestore(dev_priv-ipvr_ctx_lock, irq_flags);
 +
 + idr_remove(dev_priv-ipvr_ctx_idr, ipvr_ctx-ctx_id);
 +
 + kfree(ipvr_ctx );
 + kfree(ipvr_fpriv);
 +}


___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED

2014-11-23 Thread Cheng, Yao
 -Original Message-
 From: Cheng, Yao
 Sent: Saturday, November 22, 2014 3:07
 To: intel-gfx@lists.freedesktop.org; dri-de...@lists.freedesktop.org;
 daniel.vet...@ffwll.ch; Kelley, Sean V; Chehab, John
 Cc: Jiang, Fei; dh.herrm...@gmail.com; jani.nik...@linux.intel.com;
 emil.l.veli...@gmail.com; ville.syrj...@linux.intel.com;
 jbar...@virtuousgeek.org; dan...@fooishbar.org; Cheng, Yao
 Subject: [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED
 
 +
 +int ipvr_gem_mmap_offset_ioctl(struct drm_device *dev,
 + void *data, struct drm_file *file_priv)
 +{
 + int ret;
 + struct drm_ipvr_gem_mmap_offset *args = data;
 + struct drm_ipvr_gem_object *obj;
 +
 + IPVR_DEBUG_ENTRY(getting mmap offset for BO %u.\n, args-
 handle);
 + obj = to_ipvr_bo(drm_gem_object_lookup(dev, file_priv, args-
 handle));
 +
 + /* create map offset */
 + ret = drm_gem_create_mmap_offset(obj-base);
 + if (ret) {
 + IPVR_ERROR(could not allocate mmap offset: %d\n, ret);
 + return ret;
 + }
 + args-offset = drm_vma_node_offset_addr(obj-base.vma_node);
 + return 0;
 +}

I missed an unreferenced here.
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx