X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=wrapper%2Fsplice.c;fp=wrapper%2Fsplice.c;h=edc499c835efd2278e128d37d6ab8be5d8fb322c;hb=5dd620faf35aaa3f5633435e22556d843f9cd4a5;hp=0000000000000000000000000000000000000000;hpb=254ec7bc4c72da11a4e3f2c90904b111a06a2c55;p=lttng-modules.git diff --git a/wrapper/splice.c b/wrapper/splice.c new file mode 100644 index 00000000..edc499c8 --- /dev/null +++ b/wrapper/splice.c @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2011 Mathieu Desnoyers (mathieu.desnoyers@efficios.com) + * + * wrapper around vmalloc_sync_all. Using KALLSYMS to get its address when + * available, else we need to have a kernel that exports this function to GPL + * modules. + * + * Dual LGPL v2.1/GPL v2 license. + */ + +#ifdef CONFIG_KALLSYMS + +#include +#include +#include + +static +ssize_t (*splice_to_pipe_sym)(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd); + +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + if (!splice_to_pipe_sym) + splice_to_pipe_sym = (void *) kallsyms_lookup_name("splice_to_pipe"); + if (splice_to_pipe_sym) { + return splice_to_pipe_sym(pipe, spd); + } else { + printk(KERN_WARNING "LTTng: splice_to_pipe symbol lookup failed.\n"); + return -ENOSYS; + } +} + +#else + +#include +#include + +ssize_t wrapper_splice_to_pipe(struct pipe_inode_info *pipe, + struct splice_pipe_desc *spd) +{ + return splice_to_pipe(pipe, spd); +} + +#endif