fbdev/deferred-io: Always call get_page() for framebuffer pages
Unconditionally call get_page() after looking up a page from the framebuffer memory. Guarantees that we always hold a reference. This change also refactors the code such that it can support a driver-supplied get_page helper. This will be useful for DRM's fbdev emulation. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240419083331.7761-7-tzimmermann@suse.de
This commit is contained in:
parent
dcaefc8239
commit
1ecbc7dd29
@ -23,7 +23,7 @@
|
||||
#include <linux/rmap.h>
|
||||
#include <linux/pagemap.h>
|
||||
|
||||
static struct page *fb_deferred_io_page(struct fb_info *info, unsigned long offs)
|
||||
static struct page *fb_deferred_io_get_page(struct fb_info *info, unsigned long offs)
|
||||
{
|
||||
const void *screen_buffer = info->screen_buffer;
|
||||
struct page *page = NULL;
|
||||
@ -33,6 +33,9 @@ static struct page *fb_deferred_io_page(struct fb_info *info, unsigned long offs
|
||||
else if (info->fix.smem_start)
|
||||
page = pfn_to_page((info->fix.smem_start + offs) >> PAGE_SHIFT);
|
||||
|
||||
if (page)
|
||||
get_page(page);
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
@ -129,12 +132,10 @@ static vm_fault_t fb_deferred_io_fault(struct vm_fault *vmf)
|
||||
if (offset >= info->fix.smem_len)
|
||||
return VM_FAULT_SIGBUS;
|
||||
|
||||
page = fb_deferred_io_page(info, offset);
|
||||
page = fb_deferred_io_get_page(info, offset);
|
||||
if (!page)
|
||||
return VM_FAULT_SIGBUS;
|
||||
|
||||
get_page(page);
|
||||
|
||||
if (vmf->vma->vm_file)
|
||||
page->mapping = vmf->vma->vm_file->f_mapping;
|
||||
else
|
||||
|
Loading…
x
Reference in New Issue
Block a user