git: 0b1244bd79c2 - main - LinuxKPI: Move kfree_async() functionality in to kfree()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 10 Jan 2022 19:50:43 UTC
The branch main has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=0b1244bd79c2c4da25278a2e25a2471d9edd9408 commit 0b1244bd79c2c4da25278a2e25a2471d9edd9408 Author: Vladimir Kondratyev <wulf@FreeBSD.org> AuthorDate: 2021-11-15 13:53:02 +0000 Commit: Vladimir Kondratyev <wulf@FreeBSD.org> CommitDate: 2022-01-10 19:49:37 +0000 LinuxKPI: Move kfree_async() functionality in to kfree() Obsolete it usage but keep for a while for drm-kmod 5.4 compatibility MFC after: 1 week Reviewed by: hselasky, manu Differential Revision: https://reviews.freebsd.org/D33298 --- sys/compat/linuxkpi/common/include/linux/slab.h | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/slab.h b/sys/compat/linuxkpi/common/include/linux/slab.h index 56bb08c185e2..b8fe3a48bd3c 100644 --- a/sys/compat/linuxkpi/common/include/linux/slab.h +++ b/sys/compat/linuxkpi/common/include/linux/slab.h @@ -86,18 +86,8 @@ struct linux_kmem_cache; #define ARCH_KMALLOC_MINALIGN \ __alignof(unsigned long long) -/* - * Critical section-friendly version of kfree(). - * Requires knowledge of the allocation size at build time. - */ -#define kfree_async(ptr) do { \ - _Static_assert(sizeof(*(ptr)) >= sizeof(struct llist_node), \ - "Size of object to free is unknown or too small"); \ - if (curthread->td_critnest != 0) \ - linux_kfree_async(ptr); \ - else \ - kfree(ptr); \ -} while (0) +/* drm-kmod 5.4 compat */ +#define kfree_async(ptr) kfree(ptr); static inline gfp_t linux_check_m_flags(gfp_t flags) @@ -117,7 +107,8 @@ linux_check_m_flags(gfp_t flags) static inline void * kmalloc(size_t size, gfp_t flags) { - return (malloc(size, M_KMALLOC, linux_check_m_flags(flags))); + return (malloc(MAX(size, sizeof(struct llist_node)), M_KMALLOC, + linux_check_m_flags(flags))); } static inline void * @@ -186,10 +177,15 @@ krealloc(void *ptr, size_t size, gfp_t flags) return (realloc(ptr, size, M_KMALLOC, linux_check_m_flags(flags))); } +extern void linux_kfree_async(void *); + static inline void kfree(const void *ptr) { - free(__DECONST(void *, ptr), M_KMALLOC); + if (curthread->td_critnest != 0) + linux_kfree_async(__DECONST(void *, ptr)); + else + free(__DECONST(void *, ptr), M_KMALLOC); } static __inline void @@ -210,6 +206,5 @@ extern void *lkpi_kmem_cache_alloc(struct linux_kmem_cache *, gfp_t); extern void *lkpi_kmem_cache_zalloc(struct linux_kmem_cache *, gfp_t); extern void lkpi_kmem_cache_free(struct linux_kmem_cache *, void *); extern void linux_kmem_cache_destroy(struct linux_kmem_cache *); -void linux_kfree_async(void *); #endif /* _LINUX_SLAB_H_ */