mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-23 20:53:53 +08:00
fe3078fa5c
If we want to map GPU memory into user-space, we need to linearize the addresses to not confuse mm-core. Currently, GEM and TTM both implement their own offset-managers to assign a pgoff to each object for user-space CPU access. GEM uses a hash-table, TTM uses an rbtree. This patch provides a unified implementation that can be used to replace both. TTM allows partial mmaps with a given offset, so we cannot use hashtables as the start address may not be known at mmap time. Hence, we use the rbtree-implementation of TTM. We could easily update drm_mm to use an rbtree instead of a linked list for it's object list and thus drop the rbtree from the vma-manager. However, this would slow down drm_mm object allocation for all other use-cases (rbtree insertion) and add another 4-8 bytes to each mm node. Hence, use the separate tree but allow for later migration. This is a rewrite of the 2012-proposal by David Airlie <airlied@linux.ie> v2: - fix Docbook integration - drop drm_mm_node_linked() and use drm_mm_node_allocated() - remove unjustified likely/unlikely usage (but keep for rbtree paths) - remove BUG_ON() as drm_mm already does that - clarify page-based vs. byte-based addresses - use drm_vma_node_reset() for initialization, too v4: - allow external locking via drm_vma_offset_un/lock_lookup() - add locked lookup helper drm_vma_offset_lookup_locked() v5: - fix drm_vma_offset_lookup() to correctly validate range-mismatches (fix (offset > start + pages)) - fix drm_vma_offset_exact_lookup() to actually do what it says - remove redundant vm_pages member (add drm_vma_node_size() helper) - remove unneeded goto - fix documentation Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Dave Airlie <airlied@gmail.com>
58 lines
1.9 KiB
Makefile
58 lines
1.9 KiB
Makefile
#
|
|
# Makefile for the drm device driver. This driver provides support for the
|
|
# Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
|
|
|
|
ccflags-y := -Iinclude/drm
|
|
|
|
drm-y := drm_auth.o drm_buffer.o drm_bufs.o drm_cache.o \
|
|
drm_context.o drm_dma.o \
|
|
drm_drv.o drm_fops.o drm_gem.o drm_ioctl.o drm_irq.o \
|
|
drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \
|
|
drm_agpsupport.o drm_scatter.o drm_pci.o \
|
|
drm_platform.o drm_sysfs.o drm_hashtab.o drm_mm.o \
|
|
drm_crtc.o drm_modes.o drm_edid.o \
|
|
drm_info.o drm_debugfs.o drm_encoder_slave.o \
|
|
drm_trace_points.o drm_global.o drm_prime.o \
|
|
drm_rect.o drm_vma_manager.o
|
|
|
|
drm-$(CONFIG_COMPAT) += drm_ioc32.o
|
|
drm-$(CONFIG_DRM_GEM_CMA_HELPER) += drm_gem_cma_helper.o
|
|
drm-$(CONFIG_PCI) += ati_pcigart.o
|
|
|
|
drm-usb-y := drm_usb.o
|
|
|
|
drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o drm_dp_helper.o
|
|
drm_kms_helper-$(CONFIG_DRM_LOAD_EDID_FIRMWARE) += drm_edid_load.o
|
|
drm_kms_helper-$(CONFIG_DRM_KMS_CMA_HELPER) += drm_fb_cma_helper.o
|
|
|
|
obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
|
|
|
|
CFLAGS_drm_trace_points.o := -I$(src)
|
|
|
|
obj-$(CONFIG_DRM) += drm.o
|
|
obj-$(CONFIG_DRM_USB) += drm_usb.o
|
|
obj-$(CONFIG_DRM_TTM) += ttm/
|
|
obj-$(CONFIG_DRM_TDFX) += tdfx/
|
|
obj-$(CONFIG_DRM_R128) += r128/
|
|
obj-$(CONFIG_DRM_RADEON)+= radeon/
|
|
obj-$(CONFIG_DRM_MGA) += mga/
|
|
obj-$(CONFIG_DRM_I810) += i810/
|
|
obj-$(CONFIG_DRM_I915) += i915/
|
|
obj-$(CONFIG_DRM_MGAG200) += mgag200/
|
|
obj-$(CONFIG_DRM_CIRRUS_QEMU) += cirrus/
|
|
obj-$(CONFIG_DRM_SIS) += sis/
|
|
obj-$(CONFIG_DRM_SAVAGE)+= savage/
|
|
obj-$(CONFIG_DRM_VMWGFX)+= vmwgfx/
|
|
obj-$(CONFIG_DRM_VIA) +=via/
|
|
obj-$(CONFIG_DRM_NOUVEAU) +=nouveau/
|
|
obj-$(CONFIG_DRM_EXYNOS) +=exynos/
|
|
obj-$(CONFIG_DRM_GMA500) += gma500/
|
|
obj-$(CONFIG_DRM_UDL) += udl/
|
|
obj-$(CONFIG_DRM_AST) += ast/
|
|
obj-$(CONFIG_DRM_RCAR_DU) += rcar-du/
|
|
obj-$(CONFIG_DRM_SHMOBILE) +=shmobile/
|
|
obj-$(CONFIG_DRM_OMAP) += omapdrm/
|
|
obj-$(CONFIG_DRM_TILCDC) += tilcdc/
|
|
obj-$(CONFIG_DRM_QXL) += qxl/
|
|
obj-y += i2c/
|