drm: move "struct drm_vma_entry" to drm_vm.c
Make all the drm_vma_entry handling local to drm_vm.c and hide it from global headers. This requires to extract the inlined legacy drm_vma_entry cleanup into a small helper and also move a weirdly placed drm_vma_info helper into drm_vm.c. Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Reviewed-by: Thierry Reding <treding@nvidia.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Родитель
9fc5cde7fb
Коммит
03decbe57a
|
@ -330,8 +330,6 @@ static void drm_legacy_dev_reinit(struct drm_device *dev)
|
|||
*/
|
||||
int drm_lastclose(struct drm_device * dev)
|
||||
{
|
||||
struct drm_vma_entry *vma, *vma_temp;
|
||||
|
||||
DRM_DEBUG("\n");
|
||||
|
||||
if (dev->driver->lastclose)
|
||||
|
@ -346,13 +344,7 @@ int drm_lastclose(struct drm_device * dev)
|
|||
drm_agp_clear(dev);
|
||||
|
||||
drm_legacy_sg_cleanup(dev);
|
||||
|
||||
/* Clear vma list (only built for debugging) */
|
||||
list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
|
||||
list_del(&vma->head);
|
||||
kfree(vma);
|
||||
}
|
||||
|
||||
drm_legacy_vma_flush(dev);
|
||||
drm_legacy_dma_takedown(dev);
|
||||
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
|
|
|
@ -223,62 +223,3 @@ int drm_gem_name_info(struct seq_file *m, void *data)
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if DRM_DEBUG_CODE
|
||||
|
||||
int drm_vma_info(struct seq_file *m, void *data)
|
||||
{
|
||||
struct drm_info_node *node = (struct drm_info_node *) m->private;
|
||||
struct drm_device *dev = node->minor->dev;
|
||||
struct drm_vma_entry *pt;
|
||||
struct vm_area_struct *vma;
|
||||
unsigned long vma_count = 0;
|
||||
#if defined(__i386__)
|
||||
unsigned int pgprot;
|
||||
#endif
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_for_each_entry(pt, &dev->vmalist, head)
|
||||
vma_count++;
|
||||
|
||||
seq_printf(m, "vma use count: %lu, high_memory = %pK, 0x%pK\n",
|
||||
vma_count, high_memory,
|
||||
(void *)(unsigned long)virt_to_phys(high_memory));
|
||||
|
||||
list_for_each_entry(pt, &dev->vmalist, head) {
|
||||
vma = pt->vma;
|
||||
if (!vma)
|
||||
continue;
|
||||
seq_printf(m,
|
||||
"\n%5d 0x%pK-0x%pK %c%c%c%c%c%c 0x%08lx000",
|
||||
pt->pid,
|
||||
(void *)vma->vm_start, (void *)vma->vm_end,
|
||||
vma->vm_flags & VM_READ ? 'r' : '-',
|
||||
vma->vm_flags & VM_WRITE ? 'w' : '-',
|
||||
vma->vm_flags & VM_EXEC ? 'x' : '-',
|
||||
vma->vm_flags & VM_MAYSHARE ? 's' : 'p',
|
||||
vma->vm_flags & VM_LOCKED ? 'l' : '-',
|
||||
vma->vm_flags & VM_IO ? 'i' : '-',
|
||||
vma->vm_pgoff);
|
||||
|
||||
#if defined(__i386__)
|
||||
pgprot = pgprot_val(vma->vm_page_prot);
|
||||
seq_printf(m, " %c%c%c%c%c%c%c%c%c",
|
||||
pgprot & _PAGE_PRESENT ? 'p' : '-',
|
||||
pgprot & _PAGE_RW ? 'w' : 'r',
|
||||
pgprot & _PAGE_USER ? 'u' : 's',
|
||||
pgprot & _PAGE_PWT ? 't' : 'b',
|
||||
pgprot & _PAGE_PCD ? 'u' : 'c',
|
||||
pgprot & _PAGE_ACCESSED ? 'a' : '-',
|
||||
pgprot & _PAGE_DIRTY ? 'd' : '-',
|
||||
pgprot & _PAGE_PSE ? 'm' : 'k',
|
||||
pgprot & _PAGE_GLOBAL ? 'g' : 'l');
|
||||
#endif
|
||||
seq_printf(m, "\n");
|
||||
}
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
|
|
@ -35,11 +35,18 @@
|
|||
|
||||
#include <drm/drmP.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/seq_file.h>
|
||||
#if defined(__ia64__)
|
||||
#include <linux/efi.h>
|
||||
#include <linux/slab.h>
|
||||
#endif
|
||||
|
||||
struct drm_vma_entry {
|
||||
struct list_head head;
|
||||
struct vm_area_struct *vma;
|
||||
pid_t pid;
|
||||
};
|
||||
|
||||
static void drm_vm_open(struct vm_area_struct *vma);
|
||||
static void drm_vm_close(struct vm_area_struct *vma);
|
||||
|
||||
|
@ -662,3 +669,72 @@ int drm_mmap(struct file *filp, struct vm_area_struct *vma)
|
|||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_mmap);
|
||||
|
||||
void drm_legacy_vma_flush(struct drm_device *dev)
|
||||
{
|
||||
struct drm_vma_entry *vma, *vma_temp;
|
||||
|
||||
/* Clear vma list (only needed for legacy drivers) */
|
||||
list_for_each_entry_safe(vma, vma_temp, &dev->vmalist, head) {
|
||||
list_del(&vma->head);
|
||||
kfree(vma);
|
||||
}
|
||||
}
|
||||
|
||||
#if DRM_DEBUG_CODE
|
||||
|
||||
int drm_vma_info(struct seq_file *m, void *data)
|
||||
{
|
||||
struct drm_info_node *node = (struct drm_info_node *) m->private;
|
||||
struct drm_device *dev = node->minor->dev;
|
||||
struct drm_vma_entry *pt;
|
||||
struct vm_area_struct *vma;
|
||||
unsigned long vma_count = 0;
|
||||
#if defined(__i386__)
|
||||
unsigned int pgprot;
|
||||
#endif
|
||||
|
||||
mutex_lock(&dev->struct_mutex);
|
||||
list_for_each_entry(pt, &dev->vmalist, head)
|
||||
vma_count++;
|
||||
|
||||
seq_printf(m, "vma use count: %lu, high_memory = %pK, 0x%pK\n",
|
||||
vma_count, high_memory,
|
||||
(void *)(unsigned long)virt_to_phys(high_memory));
|
||||
|
||||
list_for_each_entry(pt, &dev->vmalist, head) {
|
||||
vma = pt->vma;
|
||||
if (!vma)
|
||||
continue;
|
||||
seq_printf(m,
|
||||
"\n%5d 0x%pK-0x%pK %c%c%c%c%c%c 0x%08lx000",
|
||||
pt->pid,
|
||||
(void *)vma->vm_start, (void *)vma->vm_end,
|
||||
vma->vm_flags & VM_READ ? 'r' : '-',
|
||||
vma->vm_flags & VM_WRITE ? 'w' : '-',
|
||||
vma->vm_flags & VM_EXEC ? 'x' : '-',
|
||||
vma->vm_flags & VM_MAYSHARE ? 's' : 'p',
|
||||
vma->vm_flags & VM_LOCKED ? 'l' : '-',
|
||||
vma->vm_flags & VM_IO ? 'i' : '-',
|
||||
vma->vm_pgoff);
|
||||
|
||||
#if defined(__i386__)
|
||||
pgprot = pgprot_val(vma->vm_page_prot);
|
||||
seq_printf(m, " %c%c%c%c%c%c%c%c%c",
|
||||
pgprot & _PAGE_PRESENT ? 'p' : '-',
|
||||
pgprot & _PAGE_RW ? 'w' : 'r',
|
||||
pgprot & _PAGE_USER ? 'u' : 's',
|
||||
pgprot & _PAGE_PWT ? 't' : 'b',
|
||||
pgprot & _PAGE_PCD ? 'u' : 'c',
|
||||
pgprot & _PAGE_ACCESSED ? 'a' : '-',
|
||||
pgprot & _PAGE_DIRTY ? 'd' : '-',
|
||||
pgprot & _PAGE_PSE ? 'm' : 'k',
|
||||
pgprot & _PAGE_GLOBAL ? 'g' : 'l');
|
||||
#endif
|
||||
seq_printf(m, "\n");
|
||||
}
|
||||
mutex_unlock(&dev->struct_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -296,12 +296,6 @@ struct drm_magic_entry {
|
|||
struct drm_file *priv;
|
||||
};
|
||||
|
||||
struct drm_vma_entry {
|
||||
struct list_head head;
|
||||
struct vm_area_struct *vma;
|
||||
pid_t pid;
|
||||
};
|
||||
|
||||
/**
|
||||
* DMA buffer.
|
||||
*/
|
||||
|
@ -1449,6 +1443,8 @@ struct drm_local_map *drm_legacy_getsarea(struct drm_device *dev);
|
|||
int drm_legacy_addbufs_agp(struct drm_device *d, struct drm_buf_desc *req);
|
||||
int drm_legacy_addbufs_pci(struct drm_device *d, struct drm_buf_desc *req);
|
||||
|
||||
void drm_legacy_vma_flush(struct drm_device *d);
|
||||
|
||||
/* sysfs support (drm_sysfs.c) */
|
||||
struct drm_sysfs_class;
|
||||
extern struct class *drm_sysfs_create(struct module *owner, char *name);
|
||||
|
|
Загрузка…
Ссылка в новой задаче