···357357 spinlock_t lock;358358} drm_freelist_t;359359360360+typedef struct drm_dma_handle {361361+ dma_addr_t busaddr;362362+ void *vaddr;363363+ size_t size;364364+} drm_dma_handle_t;365365+360366/**361367 * Buffer entry. There is one of this for each buffer size order.362368 */···372366 drm_buf_t *buflist; /**< buffer list */373367 int seg_count;374368 int page_order;375375- unsigned long *seglist;369369+ drm_dma_handle_t **seglist;376370377371 drm_freelist_t freelist;378372} drm_buf_entry_t;···488482 int context;489483 drm_hw_lock_t *lock;490484} drm_sigdata_t;491491-492492-typedef struct drm_dma_handle {493493- dma_addr_t busaddr;494494- void *vaddr;495495- size_t size;496496-} drm_dma_handle_t;497485498486/**499487 * Mappings list
+11-9
drivers/char/drm/drm_bufs.c
···474474 if (entry->seg_count) {475475 for (i = 0; i < entry->seg_count; i++) {476476 if (entry->seglist[i]) {477477- drm_free_pages(entry->seglist[i],478478- entry->page_order, DRM_MEM_DMA);477477+ drm_pci_free(dev, entry->seglist[i]);479478 }480479 }481480 drm_free(entry->seglist,···677678 int total;678679 int page_order;679680 drm_buf_entry_t *entry;680680- unsigned long page;681681+ drm_dma_handle_t *dmah;681682 drm_buf_t *buf;682683 int alignment;683684 unsigned long offset;···780781 page_count = 0;781782782783 while (entry->buf_count < count) {783783- page = drm_alloc_pages(page_order, DRM_MEM_DMA);784784- if (!page) {784784+785785+ dmah = drm_pci_alloc(dev, PAGE_SIZE << page_order, 0x1000, 0xfffffffful);786786+787787+ if (!dmah) {785788 /* Set count correctly so we free the proper amount. */786789 entry->buf_count = count;787790 entry->seg_count = count;···795794 atomic_dec(&dev->buf_alloc);796795 return -ENOMEM;797796 }798798- entry->seglist[entry->seg_count++] = page;797797+ entry->seglist[entry->seg_count++] = dmah;799798 for (i = 0; i < (1 << page_order); i++) {800799 DRM_DEBUG("page %d @ 0x%08lx\n",801800 dma->page_count + page_count,802802- page + PAGE_SIZE * i);801801+ (unsigned long)dmah->vaddr + PAGE_SIZE * i);803802 temp_pagelist[dma->page_count + page_count++]804804- = page + PAGE_SIZE * i;803803+ = (unsigned long)dmah->vaddr + PAGE_SIZE * i;805804 }806805 for (offset = 0;807806 offset + size <= total && entry->buf_count < count;···812811 buf->order = order;813812 buf->used = 0;814813 buf->offset = (dma->byte_count + byte_count + offset);815815- buf->address = (void *)(page + offset);814814+ buf->address = (void *)(dmah->vaddr + offset);815815+ buf->bus_address = dmah->busaddr + offset;816816 buf->next = NULL;817817 buf->waiting = 0;818818 buf->pending = 0;