Quoting Nirmoy Das (2020-05-19 09:44:36) > +#define DRM_MM_ALIGN_SHIFT 6 > #define HOLE_SIZE(NODE) ((NODE)->hole_size) > #define HOLE_ADDR(NODE) (__drm_mm_hole_node_start(NODE)) > +#define HOLE_SIZE_ALIGN(NODE) ((NODE->hole_size << DRM_MM_ALIGN_SHIFT) | \ > + ffs(HOLE_ADDR(NODE))) Fwiw, max hole size of 58b, we would need to stop storing byte extents... > static struct drm_mm_node * > -next_hole_low_addr(struct drm_mm_node *entry, u64 size) > +next_hole_low_addr(struct drm_mm_node *entry, u64 size, u64 alignment) > { > struct rb_node *rb_node, *right_rb_node, *parent_rb_node; > struct drm_mm_node *right_node; > + u64 req_align = (size + alignment) << DRM_MM_ALIGN_SHIFT; > > if (!entry) > return NULL; > @@ -513,6 +561,7 @@ next_hole_low_addr(struct drm_mm_node *entry, u64 size) > right_node = rb_entry(right_rb_node, > struct drm_mm_node, rb_hole_addr); > if ((right_node->subtree_max_hole < size || > + right_node->subtree_max_hole_align < req_align || What was the point in storing the packed alignment if we are just searching for a hole big enough for (size + alignment)? -Chris _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel