Commit 0e1871f6 authored by Michal Wajdeczko's avatar Michal Wajdeczko
Browse files

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: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: default avatarMatthew Brost <matthew.brost@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20241220194205.995-6-michal.wajdeczko@intel.com
parent 7e937cdf
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -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)
+17 −2
Original line number Diff line number Diff line
@@ -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);