Patch "drm: buddy_allocator: Fix buddy allocator init on 32-bit systems" has been added to the 6.2-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    drm: buddy_allocator: Fix buddy allocator init on 32-bit systems

to the 6.2-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     drm-buddy_allocator-fix-buddy-allocator-init-on-32-b.patch
and it can be found in the queue-6.2 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 4d9fe640610f3aefff4f212b9bd3ebe0b2e692a0
Author: David Gow <davidgow@xxxxxxxxxx>
Date:   Wed Mar 29 14:55:32 2023 +0800

    drm: buddy_allocator: Fix buddy allocator init on 32-bit systems
    
    [ Upstream commit 4453545b5b4c3eff941f69a5530f916d899db025 ]
    
    The drm buddy allocator tests were broken on 32-bit systems, as
    rounddown_pow_of_two() takes a long, and the buddy allocator handles
    64-bit sizes even on 32-bit systems.
    
    This can be reproduced with the drm_buddy_allocator KUnit tests on i386:
            ./tools/testing/kunit/kunit.py run --arch i386 \
            --kunitconfig ./drivers/gpu/drm/tests drm_buddy
    
    (It results in kernel BUG_ON() when too many blocks are created, due to
    the block size being too small.)
    
    This was independently uncovered (and fixed) by Luís Mendes, whose patch
    added a new u64 variant of rounddown_pow_of_two(). This version instead
    recalculates the size based on the order.
    
    Reported-by: Luís Mendes <luis.p.mendes@xxxxxxxxx>
    Link: https://lore.kernel.org/lkml/CAEzXK1oghXAB_KpKpm=-CviDQbNaH0qfgYTSSjZgvvyj4U78AA@xxxxxxxxxxxxxx/T/
    Signed-off-by: David Gow <davidgow@xxxxxxxxxx>
    Acked-by: Christian König <christian.koenig@xxxxxxx>
    Reviewed-by: Arunpravin Paneer Selvam <arunpravin.paneerselvam@xxxxxxx>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230329065532.2122295-1-davidgow@xxxxxxxxxx
    Signed-off-by: Christian König <christian.koenig@xxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c
index 3d1f50f481cfd..7098f125b54a9 100644
--- a/drivers/gpu/drm/drm_buddy.c
+++ b/drivers/gpu/drm/drm_buddy.c
@@ -146,8 +146,8 @@ int drm_buddy_init(struct drm_buddy *mm, u64 size, u64 chunk_size)
 		unsigned int order;
 		u64 root_size;
 
-		root_size = rounddown_pow_of_two(size);
-		order = ilog2(root_size) - ilog2(chunk_size);
+		order = ilog2(size) - ilog2(chunk_size);
+		root_size = chunk_size << order;
 
 		root = drm_block_alloc(mm, NULL, order, offset);
 		if (!root)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux