On Mon, 07 Mar 2022, Arunpravin <Arunpravin.PaneerSelvam@xxxxxxx> wrote: > 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. How about turning these BUG_ON()s to WARN_ON()s with an error return? What's the point in oopsing? BR, Jani. > > 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 -- Jani Nikula, Intel Open Source Graphics Center