mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
drm/xe/sa: Allow making suballocations using custom gfp flags
Actual xe_sa_manager implementation uses hardcoded GFP_KERNEL flag during creation of suballocations but in upcoming patch we want to reuse the xe_sa_manager in places where GFP_KERNEL is not allowed. Add another variant of the xe_sa_bo_new() function that accepts arbitrary gfp flags. Signed-off-by: Michal Wajdeczko <michal.wajdeczko@intel.com> Cc: Matthew Brost <matthew.brost@intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20241220194205.995-6-michal.wajdeczko@intel.com
This commit is contained in:
parent
7e937cdf18
commit
0e1871f61e
|
|
@ -74,8 +74,17 @@ struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_tile *tile, u32 size, u32
|
|||
return sa_manager;
|
||||
}
|
||||
|
||||
struct drm_suballoc *xe_sa_bo_new(struct xe_sa_manager *sa_manager,
|
||||
unsigned int size)
|
||||
/**
|
||||
* __xe_sa_bo_new() - Make a suballocation but use custom gfp flags.
|
||||
* @sa_manager: the &xe_sa_manager
|
||||
* @size: number of bytes we want to suballocate
|
||||
* @gfp: gfp flags used for memory allocation. Typically GFP_KERNEL.
|
||||
*
|
||||
* Try to make a suballocation of size @size.
|
||||
*
|
||||
* Return: a &drm_suballoc, or an ERR_PTR.
|
||||
*/
|
||||
struct drm_suballoc *__xe_sa_bo_new(struct xe_sa_manager *sa_manager, u32 size, gfp_t gfp)
|
||||
{
|
||||
/*
|
||||
* BB to large, return -ENOBUFS indicating user should split
|
||||
|
|
@ -84,7 +93,7 @@ struct drm_suballoc *xe_sa_bo_new(struct xe_sa_manager *sa_manager,
|
|||
if (size > sa_manager->base.size)
|
||||
return ERR_PTR(-ENOBUFS);
|
||||
|
||||
return drm_suballoc_new(&sa_manager->base, size, GFP_KERNEL, true, 0);
|
||||
return drm_suballoc_new(&sa_manager->base, size, gfp, true, 0);
|
||||
}
|
||||
|
||||
void xe_sa_bo_flush_write(struct drm_suballoc *sa_bo)
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
#ifndef _XE_SA_H_
|
||||
#define _XE_SA_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include "xe_sa_types.h"
|
||||
|
||||
struct dma_fence;
|
||||
|
|
@ -13,8 +14,22 @@ struct xe_tile;
|
|||
|
||||
struct xe_sa_manager *xe_sa_bo_manager_init(struct xe_tile *tile, u32 size, u32 align);
|
||||
|
||||
struct drm_suballoc *xe_sa_bo_new(struct xe_sa_manager *sa_manager,
|
||||
u32 size);
|
||||
struct drm_suballoc *__xe_sa_bo_new(struct xe_sa_manager *sa_manager, u32 size, gfp_t gfp);
|
||||
|
||||
/**
|
||||
* xe_sa_bo_new() - Make a suballocation.
|
||||
* @sa_manager: the &xe_sa_manager
|
||||
* @size: number of bytes we want to suballocate
|
||||
*
|
||||
* Try to make a suballocation of size @size.
|
||||
*
|
||||
* Return: a &drm_suballoc, or an ERR_PTR.
|
||||
*/
|
||||
static inline struct drm_suballoc *xe_sa_bo_new(struct xe_sa_manager *sa_manager, u32 size)
|
||||
{
|
||||
return __xe_sa_bo_new(sa_manager, size, GFP_KERNEL);
|
||||
}
|
||||
|
||||
void xe_sa_bo_flush_write(struct drm_suballoc *sa_bo);
|
||||
void xe_sa_bo_free(struct drm_suballoc *sa_bo,
|
||||
struct dma_fence *fence);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user