On Thu, 2009-04-23 at 17:11 +0200, Thomas Hellstrom wrote:
> Jerome Glisse wrote:
> > On Thu, 2009-04-23 at 14:29 +0200, Thomas Hellstrom wrote:
> >   
> >> Jerome Glisse wrote:
> >>     
> >>> On Thu, 2009-04-23 at 13:51 +0200, Thomas Hellstrom wrote:
> >>>   
> >>>       
> >>>> Jerome Glisse wrote:
> >>>>     
> >>>>         
> >>>>> Hi Thomas,
> >>>>>
> >>>>> It seems my path for bo move from system to vram is completely
> >>>>> wrong, i really have hard time to understand this bo move it
> >>>>> looks way more complicated than it should be. Here is what i
> >>>>> do.
> >>>>>
> >>>>> tmp_mem = *old_mem;
> >>>>> tmp_mem.mm_node = NULL;
> >>>>> tmp_mem.proposed_flags = TTM_PL_FLAG_TT | TTM_PL_MASK_CACHING;
> >>>>> r = ttm_bo_mem_space(bo, &tmp_mem, interruptible, no_wait);
> >>>>> r = ttm_bo_move_ttm(bo, true, no_wait, &tmp_mem);
> >>>>> r = radeon_move_blit(bo, true, no_wait, new_mem, old_mem);
> >>>>> accel_cleanup
> >>>>>
> >>>>> So now on resume i get a bind of 0 pages because
> >>>>> bo->ttm.state != unpopulated. Before resume this path seems
> >>>>> to work fine.
> >>>>>
> >>>>> Am i doing somethings wrong ?
> >>>>>
> >>>>>   
> >>>>>       
> >>>>>           
> >>>> The question is then how you get an unpopulated ttm without any pages in 
> >>>> it?
> >>>> If it's swapped, then the state should indeed be unpopulated.
> >>>>
> >>>> Also, why do you pass old_mem to radeon_move_blit, as that should point 
> >>>> to a system region that
> >>>> is no longer valid?
> >>>>
> >>>> /Thomas
> >>>>     
> >>>>         
> >>> bo->ttm exist and seems to have pages in it. in ttm_bo_move_ttm
> >>> *old_mem = tmp_mem so when i do move_blit with old_mem it's in
> >>> fact using the tmp mem allocated.
> >>>   
> >>>       
> >> Hmm. That's a bit confusing to me. Can't radeon_blit just use bo->mem?
> >> Anyway, you say you get a bind operation of 0 pages?  Why is the ttm_tt 
> >> code not doing the bind?
> >>
> >> /Thomas
> >>
> >>     
> >
> > It's confusing for me too, radeon_blit is just a blit function don't
> > do anythings beside emitting blit gpu command and a fence. It's the
> > ttm_tt code which calls bind.
> >
> > So ttm_tt_bind is called by ttm_bo_move_ttm, ttm_tt_bind call populate
> > but state != unpopulated thus populate return right away, then
> > ttm_tt_bind call driver callback bind but what i have in the ttm_backend
> > object is 0 pages so i am asked to bind 0 pages.
> >
> > I can't make sense of the call chain, i will dump the whole object
> > before and after suspend.
> >
> >   
> This sounds like the ttm::state and the backend is out-of-sync.
> So the only place I can find, where the ttm state can transition from  
> ttm_unpopulated is in
> ttm_tt_populate, with one exception:
> 
> If ttm_tt_unbind is called while the TT is not in the bound state, when 
> ttm->state == ttm_unpopulated,
> it may transition from ttm_unpopulated to ttm_unbound.
> 
> So in ttm_tt_unbind, if you put the
> ttm->state = ttm_unbound
> 
> within the if statement, that help finding out what's going wrong.
> 
> /Thomas
> 
> 

This fix the problem, i think unbind is call in cleanup evict path.

Cheers,
Jerome


------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to