Hi Bartlomiej,
On 12/20/2018 07:21 PM, Bartlomiej Zolnierkiewicz wrote:
On 11/26/2018 11:02 AM, Konstantin Khorenko wrote:
Scrollback frame buffer is rather big - 32K, so it requires 3rd order page, so let's use kvmalloc() instead of ordinary kmalloc() for it.
Is it actually safe to use non-contiguous memory for softback_buf?
Well, that's why we need a review. :)
i've asked myself same question while fixing this, i've dig sources a bit and did not find places when softback_buf is provided for DMA, all other places seems to work with virtual addresses, so there should be no problem.
Even more i saw a function which mentions that softback might be non-contigious:
/* As we might be inside of softback, we may work with non-contiguous buffer, that's why we have to use a separate routine. */ static void fbcon_invert_region(struct vc_data *vc, u16 * p, int cnt)
So i think it's safe to use kvmalloc() here.
-- Best regards,
Konstantin Khorenko, Virtuozzo Linux Kernel Team
Signed-off-by: Konstantin Khorenko khorenko@virtuozzo.com
drivers/video/fbdev/core/fbcon.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index 8958ccc8b1ac..2b1a34d3f5e2 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -992,7 +992,7 @@ static const char *fbcon_startup(void) if (!softback_buf) { softback_buf = (unsigned long)
kmalloc(fbcon_softback_size,
kvmalloc(fbcon_softback_size, GFP_KERNEL); if (!softback_buf) { fbcon_softback_size = 0;
@@ -1001,7 +1001,7 @@ static const char *fbcon_startup(void) } } else { if (softback_buf) {
kfree((void *) softback_buf);
kvfree((void *) softback_buf); softback_buf = 0; softback_top = 0; }
@@ -3665,7 +3665,7 @@ static void fbcon_exit(void) } #endif
- kfree((void *)softback_buf);
kvfree((void *)softback_buf); softback_buf = 0UL;
for_each_registered_fb(i) {
Best regards,
Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics