On 07/03/22 9:23 pm, Christian König wrote: > Am 07.03.22 um 15:37 schrieb Arunpravin: >> place BUG_ON(order < min_order) outside do..while >> loop as it fails Unigine Heaven benchmark. >> >> Unigine Heaven has buffer allocation requests for >> example required pages are 161 and alignment request >> is 128. To allocate the remaining 33 pages, continues >> the iteration to find the order value which is 5 and >> when it compares with min_order = 7, enables the >> BUG_ON(). To avoid this problem, placed the BUG_ON >> check outside of do..while loop. > > Well using BUG_ON sounds like the wrong approach in the first place. > > A BUG_ON() is only justified if you prevent further data corruption, > e.g. when you detect for example a reference count overflow or similar. > > In all other cases you should trigger a WARN_ON() and abort the > operation with -EINVAL if possible. > > Regards, > Christian. > ok, in this case, I think it is acceptable to use WARN_ON and abort using -EINVAL Regards, Arun >> >> Signed-off-by: Arunpravin <Arunpravin.PaneerSelvam@xxxxxxx> >> --- >> drivers/gpu/drm/drm_buddy.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/gpu/drm/drm_buddy.c b/drivers/gpu/drm/drm_buddy.c >> index 72f52f293249..ed94c56b720f 100644 >> --- a/drivers/gpu/drm/drm_buddy.c >> +++ b/drivers/gpu/drm/drm_buddy.c >> @@ -669,10 +669,11 @@ int drm_buddy_alloc_blocks(struct drm_buddy *mm, >> order = fls(pages) - 1; >> min_order = ilog2(min_page_size) - ilog2(mm->chunk_size); >> >> + BUG_ON(order < min_order); >> + >> do { >> order = min(order, (unsigned int)fls(pages) - 1); >> BUG_ON(order > mm->max_order); >> - BUG_ON(order < min_order); >> >> do { >> if (flags & DRM_BUDDY_RANGE_ALLOCATION) >> >> base-commit: 8025c79350b90e5a8029234d433578f12abbae2b >