Message ID | 20200804025632.3868079-49-airlied@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ttm misc cleanups, mem refactoring, rename objects. (v2) | expand |
On Tue, Aug 04, 2020 at 12:56:21PM +1000, Dave Airlie wrote: > From: Dave Airlie <airlied@redhat.com> > > Signed-off-by: Dave Airlie <airlied@redhat.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > --- > drivers/gpu/drm/vmwgfx/vmwgfx_thp.c | 32 +++++++++++++++++++---------- > 1 file changed, 21 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c b/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c > index 720a24214c74..1cefd9c1e8ea 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c > @@ -16,10 +16,16 @@ > * @lock: Manager lock. > */ > struct vmw_thp_manager { > + struct ttm_mem_type_manager manager; > struct drm_mm mm; > spinlock_t lock; > }; > > +static struct vmw_thp_manager *to_thp_manager(struct ttm_mem_type_manager *man) > +{ > + return container_of(man, struct vmw_thp_manager, manager); > +} > + > static int vmw_thp_insert_aligned(struct drm_mm *mm, struct drm_mm_node *node, > unsigned long align_pages, > const struct ttm_place *place, > @@ -43,7 +49,7 @@ static int vmw_thp_get_node(struct ttm_mem_type_manager *man, > const struct ttm_place *place, > struct ttm_mem_reg *mem) > { > - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; > + struct vmw_thp_manager *rman = to_thp_manager(man); > struct drm_mm *mm = &rman->mm; > struct drm_mm_node *node; > unsigned long align_pages; > @@ -103,7 +109,7 @@ static int vmw_thp_get_node(struct ttm_mem_type_manager *man, > static void vmw_thp_put_node(struct ttm_mem_type_manager *man, > struct ttm_mem_reg *mem) > { > - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; > + struct vmw_thp_manager *rman = to_thp_manager(man); > > if (mem->mm_node) { > spin_lock(&rman->lock); > @@ -117,20 +123,24 @@ static void vmw_thp_put_node(struct ttm_mem_type_manager *man, > > int vmw_thp_init(struct vmw_private *dev_priv) > { > - struct ttm_mem_type_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM); > + struct ttm_mem_type_manager *man; > struct vmw_thp_manager *rman; > + > + rman = kzalloc(sizeof(*rman), GFP_KERNEL); > + if (!rman) > + return -ENOMEM; > + > + man = &rman->manager; > man->available_caching = TTM_PL_FLAG_CACHED; > man->default_caching = TTM_PL_FLAG_CACHED; > > ttm_mem_type_manager_init(&dev_priv->bdev, man, > dev_priv->vram_size >> PAGE_SHIFT); > - rman = kzalloc(sizeof(*rman), GFP_KERNEL); > - if (!rman) > - return -ENOMEM; > > drm_mm_init(&rman->mm, 0, man->size); > spin_lock_init(&rman->lock); > - man->priv = rman; > + > + ttm_set_driver_manager(&dev_priv->bdev, TTM_PL_VRAM, &rman->manager); > ttm_mem_type_manager_set_used(man, true); > return 0; > } > @@ -138,7 +148,7 @@ int vmw_thp_init(struct vmw_private *dev_priv) > void vmw_thp_fini(struct vmw_private *dev_priv) > { > struct ttm_mem_type_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM); > - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; > + struct vmw_thp_manager *rman = to_thp_manager(man); > struct drm_mm *mm = &rman->mm; > int ret; > > @@ -151,15 +161,15 @@ void vmw_thp_fini(struct vmw_private *dev_priv) > drm_mm_clean(mm); > drm_mm_takedown(mm); > spin_unlock(&rman->lock); > - kfree(rman); > - man->priv = NULL; > ttm_mem_type_manager_cleanup(man); > + ttm_set_driver_manager(&dev_priv->bdev, TTM_PL_VRAM, NULL); > + kfree(rman); > } > > static void vmw_thp_debug(struct ttm_mem_type_manager *man, > struct drm_printer *printer) > { > - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; > + struct vmw_thp_manager *rman = to_thp_manager(man); > > spin_lock(&rman->lock); > drm_mm_print(&rman->mm, printer); > -- > 2.26.2 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c b/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c index 720a24214c74..1cefd9c1e8ea 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_thp.c @@ -16,10 +16,16 @@ * @lock: Manager lock. */ struct vmw_thp_manager { + struct ttm_mem_type_manager manager; struct drm_mm mm; spinlock_t lock; }; +static struct vmw_thp_manager *to_thp_manager(struct ttm_mem_type_manager *man) +{ + return container_of(man, struct vmw_thp_manager, manager); +} + static int vmw_thp_insert_aligned(struct drm_mm *mm, struct drm_mm_node *node, unsigned long align_pages, const struct ttm_place *place, @@ -43,7 +49,7 @@ static int vmw_thp_get_node(struct ttm_mem_type_manager *man, const struct ttm_place *place, struct ttm_mem_reg *mem) { - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; + struct vmw_thp_manager *rman = to_thp_manager(man); struct drm_mm *mm = &rman->mm; struct drm_mm_node *node; unsigned long align_pages; @@ -103,7 +109,7 @@ static int vmw_thp_get_node(struct ttm_mem_type_manager *man, static void vmw_thp_put_node(struct ttm_mem_type_manager *man, struct ttm_mem_reg *mem) { - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; + struct vmw_thp_manager *rman = to_thp_manager(man); if (mem->mm_node) { spin_lock(&rman->lock); @@ -117,20 +123,24 @@ static void vmw_thp_put_node(struct ttm_mem_type_manager *man, int vmw_thp_init(struct vmw_private *dev_priv) { - struct ttm_mem_type_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM); + struct ttm_mem_type_manager *man; struct vmw_thp_manager *rman; + + rman = kzalloc(sizeof(*rman), GFP_KERNEL); + if (!rman) + return -ENOMEM; + + man = &rman->manager; man->available_caching = TTM_PL_FLAG_CACHED; man->default_caching = TTM_PL_FLAG_CACHED; ttm_mem_type_manager_init(&dev_priv->bdev, man, dev_priv->vram_size >> PAGE_SHIFT); - rman = kzalloc(sizeof(*rman), GFP_KERNEL); - if (!rman) - return -ENOMEM; drm_mm_init(&rman->mm, 0, man->size); spin_lock_init(&rman->lock); - man->priv = rman; + + ttm_set_driver_manager(&dev_priv->bdev, TTM_PL_VRAM, &rman->manager); ttm_mem_type_manager_set_used(man, true); return 0; } @@ -138,7 +148,7 @@ int vmw_thp_init(struct vmw_private *dev_priv) void vmw_thp_fini(struct vmw_private *dev_priv) { struct ttm_mem_type_manager *man = ttm_manager_type(&dev_priv->bdev, TTM_PL_VRAM); - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; + struct vmw_thp_manager *rman = to_thp_manager(man); struct drm_mm *mm = &rman->mm; int ret; @@ -151,15 +161,15 @@ void vmw_thp_fini(struct vmw_private *dev_priv) drm_mm_clean(mm); drm_mm_takedown(mm); spin_unlock(&rman->lock); - kfree(rman); - man->priv = NULL; ttm_mem_type_manager_cleanup(man); + ttm_set_driver_manager(&dev_priv->bdev, TTM_PL_VRAM, NULL); + kfree(rman); } static void vmw_thp_debug(struct ttm_mem_type_manager *man, struct drm_printer *printer) { - struct vmw_thp_manager *rman = (struct vmw_thp_manager *) man->priv; + struct vmw_thp_manager *rman = to_thp_manager(man); spin_lock(&rman->lock); drm_mm_print(&rman->mm, printer);