diff --git a/drivers/gpu/drm/drm_pagemap.c b/drivers/gpu/drm/drm_pagemap.c index ba97daedcd49..da58422801d1 100644 --- a/drivers/gpu/drm/drm_pagemap.c +++ b/drivers/gpu/drm/drm_pagemap.c @@ -1433,6 +1433,21 @@ struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page) } EXPORT_SYMBOL_GPL(drm_pagemap_page_to_dpagemap); +/** + * drm_pagemap_page_to_devmem() - Return the devmem allocation backing a page + * @page: The struct page. + * + * Return: The &drm_pagemap_devmem backing @page. Undefined if @page was not + * populated from a &drm_pagemap. + */ +struct drm_pagemap_devmem *drm_pagemap_page_to_devmem(struct page *page) +{ + struct drm_pagemap_zdd *zdd = drm_pagemap_page_zone_device_data(page); + + return zdd->devmem_allocation; +} +EXPORT_SYMBOL_GPL(drm_pagemap_page_to_devmem); + /** * drm_pagemap_populate_mm() - Populate a virtual range with device memory pages * @dpagemap: Pointer to the drm_pagemap managing the device memory diff --git a/include/drm/drm_pagemap.h b/include/drm/drm_pagemap.h index 95eb4b66b057..376d7d400c8e 100644 --- a/include/drm/drm_pagemap.h +++ b/include/drm/drm_pagemap.h @@ -257,6 +257,8 @@ struct drm_pagemap *drm_pagemap_create(struct drm_device *drm, struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page); +struct drm_pagemap_devmem *drm_pagemap_page_to_devmem(struct page *page); + void drm_pagemap_put(struct drm_pagemap *dpagemap); #else @@ -266,6 +268,11 @@ static inline struct drm_pagemap *drm_pagemap_page_to_dpagemap(struct page *page return NULL; } +static inline struct drm_pagemap_devmem *drm_pagemap_page_to_devmem(struct page *page) +{ + return NULL; +} + static inline void drm_pagemap_put(struct drm_pagemap *dpagemap) { }