123456789101112131415161718192021222324252627282930313233343536 |
- From cf40d2d8c44a659d09d5c20189aab02f20263e81 Mon Sep 17 00:00:00 2001
- From: Phil Elwell <[email protected]>
- Date: Wed, 29 Mar 2023 09:49:36 +0100
- Subject: [PATCH] fbdev: Don't cancel deferred work if pagelist empty
- Since [1], the fbdev deferred IO framework is careful to cancel
- pending updates on close to prevent dirty pages being accessed after
- they may have been reused. However, this is not necessary in the case
- that the pagelist is empty, and drivers that don't make use of the
- pagelist may have wanted updates cancelled for no good reason.
- Avoid penalising fbdev drivers that don't make use of the pagelist by
- making the cancelling of deferred IO on close conditional on there
- being a non-empty pagelist.
- See: https://github.com/raspberrypi/linux/issues/5398
- Signed-off-by: Phil Elwell <[email protected]>
- [1] 3efc61d95259 ("fbdev: Fix invalid page access after closing deferred I/O devices")
- ---
- drivers/video/fbdev/core/fb_defio.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
- --- a/drivers/video/fbdev/core/fb_defio.c
- +++ b/drivers/video/fbdev/core/fb_defio.c
- @@ -317,7 +317,8 @@ static void fb_deferred_io_lastclose(str
- struct page *page;
- int i;
-
- - flush_delayed_work(&info->deferred_work);
- + if (!list_empty(&info->fbdefio->pagereflist))
- + flush_delayed_work(&info->deferred_work);
-
- /* clear out the mapping that we setup */
- for (i = 0 ; i < info->fix.smem_len; i += PAGE_SIZE) {
|