mirror of https://gitee.com/openkylin/linux.git
drm/todo: Better defio support in the generic fbdev emulation
The current one essentially means you need CMA or a vmalloc backed object, which makes fbdev emulation a special case. Since implementing this will be quite a bit of work, capture the idea in a TODO. Cc: Noralf Trønnes <noralf@tronnes.org> Acked-by: Noralf Trønnes <noralf@tronnes.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190107102238.7789-1-daniel.vetter@ffwll.ch
This commit is contained in:
parent
1c95f662fc
commit
be5cadc7e7
|
@ -209,6 +209,36 @@ Would be great to refactor this all into a set of small common helpers.
|
|||
|
||||
Contact: Daniel Vetter
|
||||
|
||||
Generic fbdev defio support
|
||||
---------------------------
|
||||
|
||||
The defio support code in the fbdev core has some very specific requirements,
|
||||
which means drivers need to have a special framebuffer for fbdev. Which prevents
|
||||
us from using the generic fbdev emulation code everywhere. The main issue is
|
||||
that it uses some fields in struct page itself, which breaks shmem gem objects
|
||||
(and other things).
|
||||
|
||||
Possible solution would be to write our own defio mmap code in the drm fbdev
|
||||
emulation. It would need to fully wrap the existing mmap ops, forwarding
|
||||
everything after it has done the write-protect/mkwrite trickery:
|
||||
|
||||
- In the drm_fbdev_fb_mmap helper, if we need defio, change the
|
||||
default page prots to write-protected with something like this::
|
||||
|
||||
vma->vm_page_prot = pgprot_wrprotect(vma->vm_page_prot);
|
||||
|
||||
- Set the mkwrite and fsync callbacks with similar implementions to the core
|
||||
fbdev defio stuff. These should all work on plain ptes, they don't actually
|
||||
require a struct page. uff. These should all work on plain ptes, they don't
|
||||
actually require a struct page.
|
||||
|
||||
- Track the dirty pages in a separate structure (bitfield with one bit per page
|
||||
should work) to avoid clobbering struct page.
|
||||
|
||||
Might be good to also have some igt testcases for this.
|
||||
|
||||
Contact: Daniel Vetter, Noralf Tronnes
|
||||
|
||||
Put a reservation_object into drm_gem_object
|
||||
--------------------------------------------
|
||||
|
||||
|
|
Loading…
Reference in New Issue