Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.19-rc1 66 lines 1.9 kB view raw
1/* SPDX-License-Identifier: MIT */ 2/* Copyright © 2025 Intel Corporation */ 3 4#ifndef __I915_PTR_UTIL_H__ 5#define __I915_PTR_UTIL_H__ 6 7#include <linux/types.h> 8 9#define ptr_mask_bits(ptr, n) ({ \ 10 unsigned long __v = (unsigned long)(ptr); \ 11 (typeof(ptr))(__v & -BIT(n)); \ 12}) 13 14#define ptr_unmask_bits(ptr, n) ((unsigned long)(ptr) & (BIT(n) - 1)) 15 16#define ptr_unpack_bits(ptr, bits, n) ({ \ 17 unsigned long __v = (unsigned long)(ptr); \ 18 *(bits) = __v & (BIT(n) - 1); \ 19 (typeof(ptr))(__v & -BIT(n)); \ 20}) 21 22#define ptr_pack_bits(ptr, bits, n) ({ \ 23 unsigned long __bits = (bits); \ 24 GEM_BUG_ON(__bits & -BIT(n)); \ 25 ((typeof(ptr))((unsigned long)(ptr) | __bits)); \ 26}) 27 28#define ptr_dec(ptr) ({ \ 29 unsigned long __v = (unsigned long)(ptr); \ 30 (typeof(ptr))(__v - 1); \ 31}) 32 33#define ptr_inc(ptr) ({ \ 34 unsigned long __v = (unsigned long)(ptr); \ 35 (typeof(ptr))(__v + 1); \ 36}) 37 38#define page_mask_bits(ptr) ptr_mask_bits(ptr, PAGE_SHIFT) 39#define page_unmask_bits(ptr) ptr_unmask_bits(ptr, PAGE_SHIFT) 40#define page_pack_bits(ptr, bits) ptr_pack_bits(ptr, bits, PAGE_SHIFT) 41#define page_unpack_bits(ptr, bits) ptr_unpack_bits(ptr, bits, PAGE_SHIFT) 42 43static __always_inline ptrdiff_t ptrdiff(const void *a, const void *b) 44{ 45 return a - b; 46} 47 48#define u64_to_ptr(T, x) ({ \ 49 typecheck(u64, x); \ 50 (T *)(uintptr_t)(x); \ 51}) 52 53/* 54 * container_of_user: Extract the superclass from a pointer to a member. 55 * 56 * Exactly like container_of() with the exception that it plays nicely 57 * with sparse for __user @ptr. 58 */ 59#define container_of_user(ptr, type, member) ({ \ 60 void __user *__mptr = (void __user *)(ptr); \ 61 BUILD_BUG_ON_MSG(!__same_type(*(ptr), typeof_member(type, member)) && \ 62 !__same_type(*(ptr), void), \ 63 "pointer type mismatch in container_of()"); \ 64 ((type __user *)(__mptr - offsetof(type, member))); }) 65 66#endif /* __I915_PTR_UTIL_H__ */