mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
drm/i915/stolen: convert intel_stolen_node into a real struct of its own
i915_gem_stolen.h simply defines intel_stolen_node as drm_mm_node. Make struct intel_stolen_node an actual struct of its own right, and embed struct drm_mm_node inside. This allow better unification between i915 and xe. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://lore.kernel.org/r/36762f611566d81427e702369f4e8207ead5f26c.1758732183.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
@@ -36,9 +36,9 @@
|
||||
* for is a boon.
|
||||
*/
|
||||
|
||||
int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
unsigned alignment, u64 start, u64 end)
|
||||
static int __i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
unsigned int alignment, u64 start, u64 end)
|
||||
{
|
||||
int ret;
|
||||
|
||||
@@ -58,24 +58,46 @@ int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int i915_gem_stolen_insert_node(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
unsigned alignment)
|
||||
int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915,
|
||||
struct intel_stolen_node *node, u64 size,
|
||||
unsigned int alignment, u64 start, u64 end)
|
||||
{
|
||||
return i915_gem_stolen_insert_node_in_range(i915, node,
|
||||
size, alignment,
|
||||
I915_GEM_STOLEN_BIAS,
|
||||
U64_MAX);
|
||||
return __i915_gem_stolen_insert_node_in_range(i915, &node->node,
|
||||
size, alignment,
|
||||
start, end);
|
||||
}
|
||||
|
||||
void i915_gem_stolen_remove_node(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node)
|
||||
static int __i915_gem_stolen_insert_node(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
unsigned int alignment)
|
||||
{
|
||||
return __i915_gem_stolen_insert_node_in_range(i915, node,
|
||||
size, alignment,
|
||||
I915_GEM_STOLEN_BIAS,
|
||||
U64_MAX);
|
||||
}
|
||||
|
||||
int i915_gem_stolen_insert_node(struct drm_i915_private *i915,
|
||||
struct intel_stolen_node *node, u64 size,
|
||||
unsigned int alignment)
|
||||
{
|
||||
return __i915_gem_stolen_insert_node(i915, &node->node, size, alignment);
|
||||
}
|
||||
|
||||
static void __i915_gem_stolen_remove_node(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node)
|
||||
{
|
||||
mutex_lock(&i915->mm.stolen_lock);
|
||||
drm_mm_remove_node(node);
|
||||
mutex_unlock(&i915->mm.stolen_lock);
|
||||
}
|
||||
|
||||
void i915_gem_stolen_remove_node(struct drm_i915_private *i915,
|
||||
struct intel_stolen_node *node)
|
||||
{
|
||||
__i915_gem_stolen_remove_node(i915, &node->node);
|
||||
}
|
||||
|
||||
static bool valid_stolen_size(struct drm_i915_private *i915, struct resource *dsm)
|
||||
{
|
||||
return (dsm->start != 0 || HAS_LMEMBAR_SMEM_STOLEN(i915)) && dsm->end > dsm->start;
|
||||
@@ -683,7 +705,7 @@ i915_gem_object_release_stolen(struct drm_i915_gem_object *obj)
|
||||
struct drm_mm_node *stolen = fetch_and_zero(&obj->stolen);
|
||||
|
||||
GEM_BUG_ON(!stolen);
|
||||
i915_gem_stolen_remove_node(i915, stolen);
|
||||
__i915_gem_stolen_remove_node(i915, stolen);
|
||||
kfree(stolen);
|
||||
|
||||
i915_gem_object_release_memory_region(obj);
|
||||
@@ -772,8 +794,8 @@ static int _i915_gem_object_stolen_init(struct intel_memory_region *mem,
|
||||
ret = drm_mm_reserve_node(&i915->mm.stolen, stolen);
|
||||
mutex_unlock(&i915->mm.stolen_lock);
|
||||
} else {
|
||||
ret = i915_gem_stolen_insert_node(i915, stolen, size,
|
||||
mem->min_page_size);
|
||||
ret = __i915_gem_stolen_insert_node(i915, stolen, size,
|
||||
mem->min_page_size);
|
||||
}
|
||||
if (ret)
|
||||
goto err_free;
|
||||
@@ -785,7 +807,7 @@ static int _i915_gem_object_stolen_init(struct intel_memory_region *mem,
|
||||
return 0;
|
||||
|
||||
err_remove:
|
||||
i915_gem_stolen_remove_node(i915, stolen);
|
||||
__i915_gem_stolen_remove_node(i915, stolen);
|
||||
err_free:
|
||||
kfree(stolen);
|
||||
return ret;
|
||||
@@ -1016,22 +1038,22 @@ u64 i915_gem_stolen_area_size(const struct drm_i915_private *i915)
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_node_address(const struct drm_i915_private *i915,
|
||||
const struct drm_mm_node *node)
|
||||
const struct intel_stolen_node *node)
|
||||
{
|
||||
return i915->dsm.stolen.start + i915_gem_stolen_node_offset(node);
|
||||
}
|
||||
|
||||
bool i915_gem_stolen_node_allocated(const struct drm_mm_node *node)
|
||||
bool i915_gem_stolen_node_allocated(const struct intel_stolen_node *node)
|
||||
{
|
||||
return drm_mm_node_allocated(node);
|
||||
return drm_mm_node_allocated(&node->node);
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_node_offset(const struct drm_mm_node *node)
|
||||
u64 i915_gem_stolen_node_offset(const struct intel_stolen_node *node)
|
||||
{
|
||||
return node->start;
|
||||
return node->node.start;
|
||||
}
|
||||
|
||||
u64 i915_gem_stolen_node_size(const struct drm_mm_node *node)
|
||||
u64 i915_gem_stolen_node_size(const struct intel_stolen_node *node)
|
||||
{
|
||||
return node->size;
|
||||
return node->node.size;
|
||||
}
|
||||
|
||||
@@ -7,22 +7,24 @@
|
||||
#define __I915_GEM_STOLEN_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <drm/drm_mm.h>
|
||||
|
||||
struct drm_i915_private;
|
||||
struct drm_mm_node;
|
||||
struct drm_i915_gem_object;
|
||||
struct drm_i915_private;
|
||||
|
||||
#define intel_stolen_node drm_mm_node
|
||||
struct intel_stolen_node {
|
||||
struct drm_mm_node node;
|
||||
};
|
||||
|
||||
int i915_gem_stolen_insert_node(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
struct intel_stolen_node *node, u64 size,
|
||||
unsigned alignment);
|
||||
int i915_gem_stolen_insert_node_in_range(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node, u64 size,
|
||||
struct intel_stolen_node *node, u64 size,
|
||||
unsigned alignment, u64 start,
|
||||
u64 end);
|
||||
void i915_gem_stolen_remove_node(struct drm_i915_private *i915,
|
||||
struct drm_mm_node *node);
|
||||
struct intel_stolen_node *node);
|
||||
struct intel_memory_region *
|
||||
i915_gem_stolen_smem_setup(struct drm_i915_private *i915, u16 type,
|
||||
u16 instance);
|
||||
@@ -43,10 +45,10 @@ u64 i915_gem_stolen_area_address(const struct drm_i915_private *i915);
|
||||
u64 i915_gem_stolen_area_size(const struct drm_i915_private *i915);
|
||||
|
||||
u64 i915_gem_stolen_node_address(const struct drm_i915_private *i915,
|
||||
const struct drm_mm_node *node);
|
||||
const struct intel_stolen_node *node);
|
||||
|
||||
bool i915_gem_stolen_node_allocated(const struct drm_mm_node *node);
|
||||
u64 i915_gem_stolen_node_offset(const struct drm_mm_node *node);
|
||||
u64 i915_gem_stolen_node_size(const struct drm_mm_node *node);
|
||||
bool i915_gem_stolen_node_allocated(const struct intel_stolen_node *node);
|
||||
u64 i915_gem_stolen_node_offset(const struct intel_stolen_node *node);
|
||||
u64 i915_gem_stolen_node_size(const struct intel_stolen_node *node);
|
||||
|
||||
#endif /* __I915_GEM_STOLEN_H__ */
|
||||
|
||||
Reference in New Issue
Block a user