git: a692caea30d0 - stable/13 - LinuxKPI: Move kfree_async() functionality in to kfree()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 22 Jan 2022 19:36:30 UTC
The branch stable/13 has been updated by wulf: URL: https://cgit.FreeBSD.org/src/commit/?id=a692caea30d08c0627d4ee924589f625efbefd73 commit a692caea30d08c0627d4ee924589f625efbefd73 Author: Vladimir Kondratyev <wulf@FreeBSD.org> AuthorDate: 2021-11-15 13:53:02 +0000 Commit: Vladimir Kondratyev <wulf@FreeBSD.org> CommitDate: 2022-01-22 19:34: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 (cherry picked from commit 0b1244bd79c2c4da25278a2e25a2471d9edd9408) --- 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 e29dd064ff23..f7cad5f6b4cb 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,7 +206,6 @@ 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 *); void linux_kmem_cache_free_rcu_callback(struct rcu_head *head); void linux_kmem_cache_free_rcu(struct linux_kmem_cache *, void *);