diff options
Diffstat (limited to 'backport/compat/backport-3.17.c')
-rw-r--r-- | backport/compat/backport-3.17.c | 184 |
1 files changed, 0 insertions, 184 deletions
diff --git a/backport/compat/backport-3.17.c b/backport/compat/backport-3.17.c deleted file mode 100644 index 5961e3bc..00000000 --- a/backport/compat/backport-3.17.c +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2014 Hauke Mehrtens <hauke@hauke-m.de> - * - * Backport functionality introduced in Linux 3.17. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include <linux/wait.h> -#include <linux/sched.h> -#include <linux/device.h> -#include <linux/export.h> -#include <linux/ktime.h> -#include <linux/jiffies.h> -#include <linux/moduleparam.h> - -int bit_wait(void *word) -{ - schedule(); - return 0; -} -EXPORT_SYMBOL_GPL(bit_wait); - -int bit_wait_io(void *word) -{ - io_schedule(); - return 0; -} -EXPORT_SYMBOL_GPL(bit_wait_io); - -/** - * ktime_get_raw - Returns the raw monotonic time in ktime_t format - */ -ktime_t ktime_get_raw(void) -{ - struct timespec ts; - - getrawmonotonic(&ts); - return timespec_to_ktime(ts); -} -EXPORT_SYMBOL_GPL(ktime_get_raw); - - -/** - * nsecs_to_jiffies64 - Convert nsecs in u64 to jiffies64 - * - * @n: nsecs in u64 - * - * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. - * And this doesn't return MAX_JIFFY_OFFSET since this function is designed - * for scheduler, not for use in device drivers to calculate timeout value. - * - * note: - * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) - * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years - */ -static u64 backport_nsecs_to_jiffies64(u64 n) -{ -#if (NSEC_PER_SEC % HZ) == 0 - /* Common case, HZ = 100, 128, 200, 250, 256, 500, 512, 1000 etc. */ - return div_u64(n, NSEC_PER_SEC / HZ); -#elif (HZ % 512) == 0 - /* overflow after 292 years if HZ = 1024 */ - return div_u64(n * HZ / 512, NSEC_PER_SEC / 512); -#else - /* - * Generic case - optimized for cases where HZ is a multiple of 3. - * overflow after 64.99 years, exact for HZ = 60, 72, 90, 120 etc. - */ - return div_u64(n * 9, (9ull * NSEC_PER_SEC + HZ / 2) / HZ); -#endif -} - -/** - * nsecs_to_jiffies - Convert nsecs in u64 to jiffies - * - * @n: nsecs in u64 - * - * Unlike {m,u}secs_to_jiffies, type of input is not unsigned int but u64. - * And this doesn't return MAX_JIFFY_OFFSET since this function is designed - * for scheduler, not for use in device drivers to calculate timeout value. - * - * note: - * NSEC_PER_SEC = 10^9 = (5^9 * 2^9) = (1953125 * 512) - * ULLONG_MAX ns = 18446744073.709551615 secs = about 584 years - */ -unsigned long nsecs_to_jiffies(u64 n) -{ - return (unsigned long)backport_nsecs_to_jiffies64(n); -} -EXPORT_SYMBOL_GPL(nsecs_to_jiffies); - -/** - * devm_kvasprintf - Allocate resource managed space - * for the formatted string. - * @dev: Device to allocate memory for - * @gfp: the GFP mask used in the devm_kmalloc() call when - * allocating memory - * @fmt: the formatted string to duplicate - * @ap: the list of tokens to be placed in the formatted string - * RETURNS: - * Pointer to allocated string on success, NULL on failure. - */ -char *devm_kvasprintf(struct device *dev, gfp_t gfp, const char *fmt, - va_list ap) -{ - unsigned int len; - char *p; - va_list aq; - - va_copy(aq, ap); - len = vsnprintf(NULL, 0, fmt, aq); - va_end(aq); - - p = devm_kmalloc(dev, len+1, gfp); - if (!p) - return NULL; - - vsnprintf(p, len+1, fmt, ap); - - return p; -} -EXPORT_SYMBOL_GPL(devm_kvasprintf); - -/** - * devm_kasprintf - Allocate resource managed space - * and copy an existing formatted string into that - * @dev: Device to allocate memory for - * @gfp: the GFP mask used in the devm_kmalloc() call when - * allocating memory - * @fmt: the string to duplicate - * RETURNS: - * Pointer to allocated string on success, NULL on failure. - */ -char *devm_kasprintf(struct device *dev, gfp_t gfp, const char *fmt, ...) -{ - va_list ap; - char *p; - - va_start(ap, fmt); - p = devm_kvasprintf(dev, gfp, fmt, ap); - va_end(ap); - - return p; -} -EXPORT_SYMBOL_GPL(devm_kasprintf); - -u64 bp_ktime_divns(const ktime_t kt, s64 div) -{ - u64 dclc; - int sft = 0; - - dclc = ktime_to_ns(kt); - /* Make sure the divisor is less than 2^32: */ - while (div >> 32) { - sft++; - div >>= 1; - } - dclc >>= sft; - do_div(dclc, (unsigned long) div); - - return dclc; -} -EXPORT_SYMBOL_GPL(bp_ktime_divns); - -#define STANDARD_PARAM_DEF(name, type, format, strtolfn) \ - int param_set_##name(const char *val, const struct kernel_param *kp) \ - { \ - return strtolfn(val, 0, (type *)kp->arg); \ - } \ - int param_get_##name(char *buffer, const struct kernel_param *kp) \ - { \ - return scnprintf(buffer, PAGE_SIZE, format, \ - *((type *)kp->arg)); \ - } \ - struct kernel_param_ops param_ops_##name = { \ - .set = param_set_##name, \ - .get = param_get_##name, \ - }; \ - EXPORT_SYMBOL(param_set_##name); \ - EXPORT_SYMBOL(param_get_##name); \ - EXPORT_SYMBOL(param_ops_##name) -STANDARD_PARAM_DEF(ullong, unsigned long long, "%llu", kstrtoull); |