• Thomas Zimmermann's avatar
    fbdev: Track deferred-I/O pages in pageref struct · 56c134f7
    Thomas Zimmermann authored
    Store the per-page state for fbdev's deferred I/O in struct
    fb_deferred_io_pageref. Maintain a list of pagerefs for the pages
    that have to be written back to video memory. Update all affected
    drivers.
    
    As with pages before, fbdev acquires a pageref when an mmaped page
    of the framebuffer is being written to. It holds the pageref in a
    list of all currently written pagerefs until it flushes the written
    pages to video memory. Writeback occurs periodically. After writeback
    fbdev releases all pagerefs and builds up a new dirty list until the
    next writeback occurs.
    
    Using pagerefs has a number of benefits.
    
    For pages of the framebuffer, the deferred I/O code used struct
    page.lru as an entry into the list of dirty pages. The lru field is
    owned by the page cache, which makes deferred I/O incompatible with
    some memory pages (e.g., most notably DRM's GEM SHMEM allocator).
    struct fb_deferred_io_pageref now provides an entry into a list of
    dirty framebuffer pages, freeing lru for use with the page cache.
    
    Drivers also assumed that struct page.index is the page offset into
    the framebuffer. This is not true for DRM buffers, which are located
    at various offset within a mapped area. struct fb_deferred_io_pageref
    explicitly stores an offset into the framebuffer. struct page.index
    is now only the page offset into the mapped area.
    
    These changes will allow DRM to use fbdev deferred I/O without an
    intermediate shadow buffer.
    
    v3:
    	* use pageref->offset for sorting
    	* fix grammar in comment
    v2:
    	* minor fixes in commit message
    Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
    Reviewed-by: default avatarJavier Martinez Canillas <javierm@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20220429100834.18898-3-tzimmermann@suse.de
    56c134f7
xen-fbfront.c 18 KB