mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:04:43 +01:00
drm/i915: split out i915_ptr_util.h
Move pointer related utilities from i915_utils.h to a separate new i915_ptr_util.h header. Clean up related includes. Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://lore.kernel.org/r/3cd06aa2483e68f19401292e9d4c28bf2977fce5.1757582214.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
72136efb87
commit
a394f12a4d
6 changed files with 73 additions and 63 deletions
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
#include "i915_active_types.h"
|
||||
#include "i915_sw_fence.h"
|
||||
#include "i915_utils.h"
|
||||
#include "intel_engine_types.h"
|
||||
#include "intel_sseu.h"
|
||||
#include "intel_wakeref.h"
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "i915_active.h"
|
||||
#include "i915_syncmap.h"
|
||||
#include "i915_utils.h"
|
||||
#include "intel_timeline_types.h"
|
||||
|
||||
struct drm_printer;
|
||||
|
|
|
|||
66
drivers/gpu/drm/i915/i915_ptr_util.h
Normal file
66
drivers/gpu/drm/i915/i915_ptr_util.h
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
/* SPDX-License-Identifier: MIT */
|
||||
/* Copyright © 2025 Intel Corporation */
|
||||
|
||||
#ifndef __I915_PTR_UTIL_H__
|
||||
#define __I915_PTR_UTIL_H__
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define ptr_mask_bits(ptr, n) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
(typeof(ptr))(__v & -BIT(n)); \
|
||||
})
|
||||
|
||||
#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1))
|
||||
|
||||
#define ptr_unpack_bits(ptr, bits, n) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
*(bits) = __v & (BIT(n) - 1); \
|
||||
(typeof(ptr))(__v & -BIT(n)); \
|
||||
})
|
||||
|
||||
#define ptr_pack_bits(ptr, bits, n) ({ \
|
||||
unsigned long __bits = (bits); \
|
||||
GEM_BUG_ON(__bits & -BIT(n)); \
|
||||
((typeof(ptr))((unsigned long)(ptr) | __bits)); \
|
||||
})
|
||||
|
||||
#define ptr_dec(ptr) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
(typeof(ptr))(__v - 1); \
|
||||
})
|
||||
|
||||
#define ptr_inc(ptr) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
(typeof(ptr))(__v + 1); \
|
||||
})
|
||||
|
||||
#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT)
|
||||
#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT)
|
||||
#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT)
|
||||
#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT)
|
||||
|
||||
static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
#define u64_to_ptr(T, x) ({ \
|
||||
typecheck(u64, x); \
|
||||
(T *)(uintptr_t)(x); \
|
||||
})
|
||||
|
||||
/*
|
||||
* container_of_user: Extract the superclass from a pointer to a member.
|
||||
*
|
||||
* Exactly like container_of() with the exception that it plays nicely
|
||||
* with sparse for __user @ptr.
|
||||
*/
|
||||
#define container_of_user(ptr, type, member) ({ \
|
||||
void __user *__mptr = (void __user *)(ptr); \
|
||||
BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \
|
||||
!__same_type(*(ptr), void), \
|
||||
"pointer type mismatch in container_of()"); \
|
||||
((type __user *)(__mptr - offsetof(type, member))); })
|
||||
|
||||
#endif /* __I915_PTR_UTIL_H__ */
|
||||
|
|
@ -31,19 +31,20 @@
|
|||
#include <linux/llist.h>
|
||||
#include <linux/lockdep.h>
|
||||
|
||||
#include <uapi/drm/i915_drm.h>
|
||||
|
||||
#include "gem/i915_gem_context_types.h"
|
||||
#include "gt/intel_context_types.h"
|
||||
#include "gt/intel_engine_types.h"
|
||||
#include "gt/intel_timeline_types.h"
|
||||
|
||||
#include "i915_gem.h"
|
||||
#include "i915_ptr_util.h"
|
||||
#include "i915_scheduler.h"
|
||||
#include "i915_selftest.h"
|
||||
#include "i915_sw_fence.h"
|
||||
#include "i915_vma_resource.h"
|
||||
|
||||
#include <uapi/drm/i915_drm.h>
|
||||
|
||||
struct drm_file;
|
||||
struct drm_i915_gem_object;
|
||||
struct drm_printer;
|
||||
|
|
|
|||
|
|
@ -67,64 +67,12 @@ bool i915_error_injected(void);
|
|||
drm_err(&(i915)->drm, fmt, ##__VA_ARGS__); \
|
||||
})
|
||||
|
||||
#define ptr_mask_bits(ptr, n) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
(typeof(ptr))(__v & -BIT(n)); \
|
||||
})
|
||||
|
||||
#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1))
|
||||
|
||||
#define ptr_unpack_bits(ptr, bits, n) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
*(bits) = __v & (BIT(n) - 1); \
|
||||
(typeof(ptr))(__v & -BIT(n)); \
|
||||
})
|
||||
|
||||
#define ptr_pack_bits(ptr, bits, n) ({ \
|
||||
unsigned long __bits = (bits); \
|
||||
GEM_BUG_ON(__bits & -BIT(n)); \
|
||||
((typeof(ptr))((unsigned long)(ptr) | __bits)); \
|
||||
})
|
||||
|
||||
#define ptr_dec(ptr) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
(typeof(ptr))(__v - 1); \
|
||||
})
|
||||
|
||||
#define ptr_inc(ptr) ({ \
|
||||
unsigned long __v = (unsigned long)(ptr); \
|
||||
(typeof(ptr))(__v + 1); \
|
||||
})
|
||||
|
||||
#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT)
|
||||
#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT)
|
||||
#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT)
|
||||
#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT)
|
||||
|
||||
#define fetch_and_zero(ptr) ({ \
|
||||
typeof(*ptr) __T = *(ptr); \
|
||||
*(ptr) = (typeof(*ptr))0; \
|
||||
__T; \
|
||||
})
|
||||
|
||||
static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
|
||||
{
|
||||
return a - b;
|
||||
}
|
||||
|
||||
/*
|
||||
* container_of_user: Extract the superclass from a pointer to a member.
|
||||
*
|
||||
* Exactly like container_of() with the exception that it plays nicely
|
||||
* with sparse for __user @ptr.
|
||||
*/
|
||||
#define container_of_user(ptr, type, member) ({ \
|
||||
void __user *__mptr = (void __user *)(ptr); \
|
||||
BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \
|
||||
!__same_type(*(ptr), void), \
|
||||
"pointer type mismatch in container_of()"); \
|
||||
((type __user *)(__mptr - offsetof(type, member))); })
|
||||
|
||||
/*
|
||||
* check_user_mbz: Check that a user value exists and is zero
|
||||
*
|
||||
|
|
@ -143,11 +91,6 @@ static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b)
|
|||
get_user(mbz__, (U)) ? -EFAULT : mbz__ ? -EINVAL : 0; \
|
||||
})
|
||||
|
||||
#define u64_to_ptr(T, x) ({ \
|
||||
typecheck(u64, x); \
|
||||
(T *)(uintptr_t)(x); \
|
||||
})
|
||||
|
||||
#define __mask_next_bit(mask) ({ \
|
||||
int __idx = ffs(mask) - 1; \
|
||||
mask &= ~BIT(__idx); \
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@
|
|||
|
||||
#include <drm/drm_mm.h>
|
||||
|
||||
#include "gt/intel_ggtt_fencing.h"
|
||||
#include "gem/i915_gem_object.h"
|
||||
|
||||
#include "i915_gem_gtt.h"
|
||||
#include "gt/intel_ggtt_fencing.h"
|
||||
|
||||
#include "i915_active.h"
|
||||
#include "i915_gem_gtt.h"
|
||||
#include "i915_ptr_util.h"
|
||||
#include "i915_request.h"
|
||||
#include "i915_vma_resource.h"
|
||||
#include "i915_vma_types.h"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue