From: Michael Jeanson Date: Fri, 11 Sep 2015 20:06:25 +0000 (-0400) Subject: Fix: lttng-test build failure for kernels < 3.0 X-Git-Tag: v2.8.0-rc1~75 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=5a18f28d14f483c240e4dabd34c08a038ea01484;p=lttng-modules.git Fix: lttng-test build failure for kernels < 3.0 Fixes an undefined reference to kstrtouint_from_user. Signed-off-by: Michael Jeanson Signed-off-by: Mathieu Desnoyers --- diff --git a/probes/lttng-test.c b/probes/lttng-test.c index 2a66f455..bd9f5f89 100644 --- a/probes/lttng-test.c +++ b/probes/lttng-test.c @@ -28,6 +28,7 @@ #include "../lttng-events.h" #include "../lttng-tracer.h" #include "../wrapper/tracepoint.h" +#include "../wrapper/kstrtox.h" #define TP_MODULE_NOAUTOLOAD #define LTTNG_PACKAGE_BUILD @@ -76,7 +77,7 @@ ssize_t lttng_test_filter_event_write(struct file *file, const char __user *user int ret; /* Get the number of iterations */ - ret = kstrtouint_from_user(user_buf, count, 10, &nr_iter); + ret = lttng_kstrtouint_from_user(user_buf, count, 10, &nr_iter); if (ret) { written = ret; goto end; diff --git a/wrapper/kstrtox.h b/wrapper/kstrtox.h new file mode 100644 index 00000000..0f0666fe --- /dev/null +++ b/wrapper/kstrtox.h @@ -0,0 +1,58 @@ +#ifndef _LTTNG_WRAPPER_KSTRTOX_H +#define _LTTNG_WRAPPER_KSTRTOX_H + +/* + * wrapper/kstrtox.h + * + * Copyright (C) 2015 Michael Jeanson + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) + +/* Excludes final \0. */ +#define LTTNG_MAX_UINT_CHAR 10 + +static inline +int __must_check lttng_kstrtouint_from_user(const char __user *ubuf, + size_t count, unsigned int base, unsigned int *res) +{ + unsigned int _res; + char kbuf[LTTNG_MAX_UINT_CHAR + 1], *endptr; + + memset(kbuf, 0, sizeof(kbuf)); + if (copy_from_user(kbuf, ubuf, min_t(size_t, LTTNG_MAX_UINT_CHAR, count))) + return -EFAULT; + + _res = simple_strtoul(kbuf, &endptr, base); + if (!endptr) + return -EINVAL; + + *res = _res; + return 0; +} +#else +static inline +int __must_check lttng_kstrtouint_from_user(const char __user *ubuf, + size_t count, unsigned int base, unsigned int *res) +{ + return kstrtouint_from_user(ubuf, count, base, res); +} +#endif + +#endif /* _LTTNG_WRAPPER_KSTRTOX_H */