Eric Anholt wrote:
> On Sun, 2008-04-06 at 02:21 -0700, Thomas Hellstrom wrote:
>   
>> linux-core/drm_objects.h |    2 ++
>>  linux-core/drm_ttm.c     |   12 +++++++++---
>>  2 files changed, 11 insertions(+), 3 deletions(-)
>>
>> New commits:
>> commit e89710bef7691e4e9d0bc7d427542bfae6ce4258
>> Author: Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
>> Date:   Sun Apr 6 11:21:22 2008 +0200
>>
>>     Place highmem pages last in the ttm page array.
>>     
>
> Could you add a comment explaining what this is about?
>   
This is to prepare for Dave's linux 2.6.26 set_memory_uc_array() 
interface which accepts an array of virtual addresses, and hence no 
highmem pages.

We have two ways to handle this

a) Allocate a new temporary array that holds the virtual addresses. This 
will in many cases fall back to using slow vmalloc() and not desirable.
b) Temporarily (during the set_memory_uc_array() call only) typecast the 
page array entries and replace the (struct page) pointers with unsigned 
long virtual addresses for the lomem pages. This avoids the vmalloc() 
but OTOH is a bit ugly.

The above commit is to pave the way for b) if we want to go that way.

/Thomas

>> diff --git a/linux-core/drm_objects.h b/linux-core/drm_objects.h
>> index 9bd04ff..c32edac 100644
>> --- a/linux-core/drm_objects.h
>> +++ b/linux-core/drm_objects.h
>> @@ -311,6 +311,8 @@ struct drm_ttm_backend {
>>  struct drm_ttm {
>>      struct page *dummy_read_page;
>>      struct page **pages;
>> +    long first_himem_page;
>> +    long last_lomem_page;
>>      uint32_t page_flags;
>>      unsigned long num_pages;
>>      atomic_t vma_count;
>> diff --git a/linux-core/drm_ttm.c b/linux-core/drm_ttm.c
>> index da202a5..c306a2c 100644
>> --- a/linux-core/drm_ttm.c
>> +++ b/linux-core/drm_ttm.c
>> @@ -263,12 +263,16 @@ struct page *drm_ttm_get_page(struct drm_ttm *ttm, int 
>> index)
>>      struct page *p;
>>      struct drm_buffer_manager *bm = &ttm->dev->bm;
>>  
>> -    p = ttm->pages[index];
>> -    if (!p) {
>> +    while(NULL == (p = ttm->pages[index])) {
>>              p = drm_ttm_alloc_page();
>>              if (!p)
>>                      return NULL;
>> -            ttm->pages[index] = p;
>> +
>> +            if (PageHighMem(p))
>> +                    ttm->pages[--ttm->first_himem_page] = p;
>> +            else
>> +                    ttm->pages[++ttm->last_lomem_page] = p;
>> +
>>              ++bm->cur_pages;
>>      }
>>      return p;
>> @@ -376,6 +380,8 @@ struct drm_ttm *drm_ttm_create(struct drm_device *dev, 
>> unsigned long size,
>>  
>>      ttm->destroy = 0;
>>      ttm->num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
>> +    ttm->first_himem_page = ttm->num_pages;
>> +    ttm->last_lomem_page = -1;
>>  
>>      ttm->page_flags = page_flags;
>>  
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
>> Register now and save $200. Hurry, offer ends at 11:59 p.m., 
>> Monday, April 7! Use priority code J8TLD2. 
>> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
>> --
>> _______________________________________________
>> Dri-patches mailing list
>> [EMAIL PROTECTED]
>> https://lists.sourceforge.net/lists/listinfo/dri-patches
>>     
>> ------------------------------------------------------------------------
>>
>> -------------------------------------------------------------------------
>> This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
>> Register now and save $200. Hurry, offer ends at 11:59 p.m., 
>> Monday, April 7! Use priority code J8TLD2. 
>> http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
>> ------------------------------------------------------------------------
>>
>> --
>> _______________________________________________
>> Dri-devel mailing list
>> Dri-devel@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/dri-devel
>>     




-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference 
Register now and save $200. Hurry, offer ends at 11:59 p.m., 
Monday, April 7! Use priority code J8TLD2. 
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
--
_______________________________________________
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel

Reply via email to