Re: [Intel-gfx] [RFC PATCH v3 2/4] drm/ipvr: drm driver for VED
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
-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
-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
-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