X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=include%2Fwrapper%2Fvmalloc.h;h=0fe6af8a75e2c7269638d2346a927ef1091ea1d0;hb=116a8cdbdd5b0ddb988936586fc41ab4cedf12dc;hp=902c65557c3aa979046f2701599e87cbfa27b008;hpb=fd094ddf7daceaeb467b612c2fe5446fcc2c4aa9;p=lttng-modules.git diff --git a/include/wrapper/vmalloc.h b/include/wrapper/vmalloc.h index 902c6555..0fe6af8a 100644 --- a/include/wrapper/vmalloc.h +++ b/include/wrapper/vmalloc.h @@ -12,8 +12,9 @@ #ifndef _LTTNG_WRAPPER_VMALLOC_H #define _LTTNG_WRAPPER_VMALLOC_H -#include +#include #include +#include #include #ifdef CONFIG_KALLSYMS @@ -22,7 +23,7 @@ #include #include -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,8,0)) /* * wrapper_vmalloc_sync_mappings was removed in v5.8, the vmalloc mappings @@ -32,17 +33,18 @@ static inline void wrapper_vmalloc_sync_mappings(void) {} -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) \ +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0) \ || LTTNG_KERNEL_RANGE(5,5,12, 5,6,0) \ || LTTNG_KERNEL_RANGE(5,4,28, 5,5,0) \ || LTTNG_KERNEL_RANGE(5,2,37, 5,3,0) \ || LTTNG_KERNEL_RANGE(4,19,113, 4,20,0) \ || LTTNG_KERNEL_RANGE(4,14,175, 4,15,0) \ || LTTNG_KERNEL_RANGE(4,9,218, 4,10,0) \ - || LTTNG_KERNEL_RANGE(4,4,218, 4,5,0)) \ + || LTTNG_KERNEL_RANGE(4,4,218, 4,5,0) \ || LTTNG_UBUNTU_KERNEL_RANGE(4,15,18,97, 4,16,0,0) \ || LTTNG_UBUNTU_KERNEL_RANGE(5,0,21,48, 5,1,0,0) \ - || LTTNG_UBUNTU_KERNEL_RANGE(5,3,18,52, 5,4,0,0) + || LTTNG_UBUNTU_KERNEL_RANGE(5,3,18,52, 5,4,0,0) \ + || LTTNG_RHEL_KERNEL_RANGE(4,18,0,240,0,0, 4,19,0,0,0,0)) static inline void wrapper_vmalloc_sync_mappings(void) @@ -59,7 +61,7 @@ void wrapper_vmalloc_sync_mappings(void) * trigger recursive page faults. */ printk_once(KERN_WARNING "LTTng: vmalloc_sync_mappings symbol lookup failed.\n"); - printk_once(KERN_WARNING "Page fault handler and NMI tracing might trigger faults.\n"); + printk_once(KERN_WARNING "LTTng: Page fault handler and NMI tracing might trigger faults.\n"); #endif } } @@ -77,7 +79,7 @@ void __canary__vmalloc_sync_mappings(void) vmalloc_sync_mappings(); } -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) */ /* * Map vmalloc_sync_mappings to vmalloc_sync_all() on kernels before 5.6. @@ -97,7 +99,7 @@ void wrapper_vmalloc_sync_mappings(void) * trigger recursive page faults. */ printk_once(KERN_WARNING "LTTng: vmalloc_sync_all symbol lookup failed.\n"); - printk_once(KERN_WARNING "Page fault handler and NMI tracing might trigger faults.\n"); + printk_once(KERN_WARNING "LTTng: Page fault handler and NMI tracing might trigger faults.\n"); #endif } } @@ -115,11 +117,11 @@ void __canary__vmalloc_sync_all(void) vmalloc_sync_all(); } -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) */ #else /* CONFIG_KALLSYMS */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,8,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,8,0)) /* * wrapper_vmalloc_sync_mappings was removed in v5.8, the vmalloc mappings @@ -129,7 +131,7 @@ static inline void wrapper_vmalloc_sync_mappings(void) {} -#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) \ +#elif (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0) \ || LTTNG_KERNEL_RANGE(5,5,12, 5,6,0) \ || LTTNG_KERNEL_RANGE(5,4,28, 5,5,0) \ || LTTNG_KERNEL_RANGE(5,2,37, 5,3,0) \ @@ -147,7 +149,7 @@ void wrapper_vmalloc_sync_mappings(void) return vmalloc_sync_mappings(); } -#else /* #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ +#else /* #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) */ static inline void wrapper_vmalloc_sync_mappings(void) @@ -155,11 +157,11 @@ void wrapper_vmalloc_sync_mappings(void) return vmalloc_sync_all(); } -#endif /* #else #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0)) */ +#endif /* #else #if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(5,6,0)) */ -#endif +#endif /* CONFIG_KALLSYMS */ -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,12,0)) +#if (LTTNG_LINUX_VERSION_CODE >= LTTNG_KERNEL_VERSION(4,12,0)) static inline void *lttng_kvmalloc_node(unsigned long size, gfp_t flags, int node) { @@ -200,7 +202,7 @@ void lttng_kvfree(const void *addr) kvfree(addr); } -#else +#else /* >= LTTNG_KERNEL_VERSION(4,12,0) */ #include @@ -208,12 +210,10 @@ static inline void print_vmalloc_node_range_warning(void) { printk_once(KERN_WARNING "LTTng: __vmalloc_node_range symbol lookup failed.\n"); - printk_once(KERN_WARNING "Tracer performance will be degraded on NUMA systems.\n"); - printk_once(KERN_WARNING "Please rebuild your kernel with CONFIG_KALLSYMS enabled.\n"); + printk_once(KERN_WARNING "LTTng: Tracer performance will be degraded on NUMA systems.\n"); + printk_once(KERN_WARNING "LTTng: Please rebuild your kernel with CONFIG_KALLSYMS enabled.\n"); } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) - /* * kallsyms wrapper of __vmalloc_node with a fallback to kmalloc_node. */ @@ -262,56 +262,6 @@ void *__canary____lttng_vmalloc_node_range(unsigned long size, unsigned long ali vm_flags, node, caller); } -#else /* (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) */ - -/* - * kallsyms wrapper of __vmalloc_node with a fallback to kmalloc_node. - */ -static inline -void *__lttng_vmalloc_node_range(unsigned long size, unsigned long align, - unsigned long start, unsigned long end, gfp_t gfp_mask, - pgprot_t prot, unsigned long vm_flags, int node, - const void *caller) -{ -#ifdef CONFIG_KALLSYMS - /* - * If we have KALLSYMS, get * __vmalloc_node_range which is not exported. - */ - void *(*lttng__vmalloc_node_range)(unsigned long size, unsigned long align, - unsigned long start, unsigned long end, gfp_t gfp_mask, - pgprot_t prot, int node, const void *caller); - - lttng__vmalloc_node_range = (void *) kallsyms_lookup_funcptr("__vmalloc_node_range"); - if (lttng__vmalloc_node_range) - return lttng__vmalloc_node_range(size, align, start, end, gfp_mask, prot, - node, caller); -#endif - if (node != NUMA_NO_NODE) - print_vmalloc_node_range_warning(); - return __vmalloc(size, gfp_mask, prot); -} - -/* - * Canary function to check for '__vmalloc_node_range()' at compile time. - * - * From 'include/linux/vmalloc.h': - * - * extern void *__vmalloc_node_range(unsigned long size, unsigned long align, - * unsigned long start, unsigned long end, gfp_t gfp_mask, - * pgprot_t prot, unsigned long vm_flags, int node, - * const void *caller); - */ -static inline -void *__canary____lttng_vmalloc_node_range(unsigned long size, unsigned long align, - unsigned long start, unsigned long end, gfp_t gfp_mask, - pgprot_t prot, int node, const void *caller) -{ - return __vmalloc_node_range(size, align, start, end, gfp_mask, prot, - node, caller); -} - -#endif - /** * lttng_kvmalloc_node - attempt to allocate physically contiguous memory, but upon * failure, fall back to non-contiguous (vmalloc) allocation. @@ -387,6 +337,6 @@ void lttng_kvfree(const void *addr) kfree(addr); } } -#endif +#endif /* >= LTTNG_KERNEL_VERSION(4,12,0) */ #endif /* _LTTNG_WRAPPER_VMALLOC_H */