The GART allocations are a propery of the gart, not of scatter-gather
memory. Track them in the appropriate structure. MFC after: 3 days
This commit is contained in:
parent
b4fc9c3e14
commit
164b031cda
@ -104,7 +104,7 @@ drm_ati_alloc_pcigart_table(struct drm_device *dev,
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
dev->sg->dmah = dmah;
|
||||
gart_info->dmah = dmah;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -113,12 +113,12 @@ static void
|
||||
drm_ati_free_pcigart_table(struct drm_device *dev,
|
||||
struct drm_ati_pcigart_info *gart_info)
|
||||
{
|
||||
struct drm_dma_handle *dmah = dev->sg->dmah;
|
||||
struct drm_dma_handle *dmah = gart_info->dmah;
|
||||
|
||||
bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
|
||||
bus_dma_tag_destroy(dmah->tag);
|
||||
free(dmah, DRM_MEM_DMA);
|
||||
dev->sg->dmah = NULL;
|
||||
gart_info->dmah = NULL;
|
||||
}
|
||||
|
||||
int
|
||||
@ -134,7 +134,7 @@ drm_ati_pcigart_cleanup(struct drm_device *dev,
|
||||
if (gart_info->bus_addr) {
|
||||
if (gart_info->gart_table_location == DRM_ATI_GART_MAIN) {
|
||||
gart_info->bus_addr = 0;
|
||||
if (dev->sg->dmah)
|
||||
if (gart_info->dmah)
|
||||
drm_ati_free_pcigart_table(dev, gart_info);
|
||||
}
|
||||
}
|
||||
@ -169,8 +169,8 @@ drm_ati_pcigart_init(struct drm_device *dev,
|
||||
goto done;
|
||||
}
|
||||
|
||||
address = (void *)dev->sg->dmah->vaddr;
|
||||
bus_address = dev->sg->dmah->busaddr;
|
||||
address = (void *)gart_info->dmah->vaddr;
|
||||
bus_address = gart_info->dmah->busaddr;
|
||||
} else {
|
||||
address = gart_info->addr;
|
||||
bus_address = gart_info->bus_addr;
|
||||
|
@ -480,9 +480,7 @@ typedef struct drm_sg_mem {
|
||||
void *virtual;
|
||||
int pages;
|
||||
dma_addr_t *busaddr;
|
||||
struct drm_dma_handle *sg_dmah; /* Handle for sg_pages */
|
||||
struct drm_dma_handle *dmah; /* Handle to PCI memory */
|
||||
/* for ATI PCIGART table */
|
||||
} drm_sg_mem_t;
|
||||
|
||||
typedef TAILQ_HEAD(drm_map_list, drm_local_map) drm_map_list_t;
|
||||
@ -543,6 +541,7 @@ struct drm_ati_pcigart_info {
|
||||
struct drm_dma_handle *table_handle;
|
||||
drm_local_map_t mapping;
|
||||
int table_size;
|
||||
struct drm_dma_handle *dmah; /* handle for ATI PCIGART table */
|
||||
};
|
||||
|
||||
#ifndef DMA_BIT_MASK
|
||||
|
@ -112,7 +112,7 @@ drm_sg_alloc(struct drm_device *dev, struct drm_scatter_gather *request)
|
||||
return ENOMEM;
|
||||
}
|
||||
|
||||
entry->sg_dmah = dmah;
|
||||
entry->dmah = dmah;
|
||||
entry->handle = (unsigned long)dmah->vaddr;
|
||||
|
||||
DRM_DEBUG("sg alloc handle = %08lx\n", entry->handle);
|
||||
@ -160,7 +160,7 @@ drm_sg_alloc_ioctl(struct drm_device *dev, void *data,
|
||||
void
|
||||
drm_sg_cleanup(struct drm_sg_mem *entry)
|
||||
{
|
||||
struct drm_dma_handle *dmah = entry->sg_dmah;
|
||||
struct drm_dma_handle *dmah = entry->dmah;
|
||||
|
||||
bus_dmamap_unload(dmah->tag, dmah->map);
|
||||
bus_dmamem_free(dmah->tag, dmah->vaddr, dmah->map);
|
||||
|
Loading…
Reference in New Issue
Block a user