diff --git a/scst/include/backport.h b/scst/include/backport.h index d4c870cc5..517cc27e3 100644 --- a/scst/include/backport.h +++ b/scst/include/backport.h @@ -22,6 +22,162 @@ #include /* sync_page_range() */ +/* */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) +#define smp_mb__after_atomic_inc smp_mb__after_atomic +#define smp_mb__after_clear_bit smp_mb__after_atomic +#define smp_mb__before_atomic_dec smp_mb__before_atomic +#define smp_mb__after_atomic_dec smp_mb__after_atomic +#endif + +/* */ + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 32) +#ifndef O_DSYNC +#define O_DSYNC O_SYNC +#endif +#endif + +/* */ + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 20) +#ifndef __printf +#define __printf(a, b) __attribute__((format(printf,a,b))) +#endif +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21) +#ifndef __aligned +#define __aligned(x) __attribute__((aligned(x))) +#endif +#ifndef __packed +#define __packed __attribute__((packed)) +#endif +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26) +/* + * See also patch "Move ACCESS_ONCE() to " (commit ID + * 9c3cdc1f83a6e07092392ff4aba6466517dbd1d0). + */ +#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) +#endif + +/* */ + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 20) && !defined(BACKPORT_LINUX_CPUMASK_H) +#define nr_cpu_ids NR_CPUS +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28) && defined(__LINUX_CPUMASK_H) +/* + * See also patch "cpumask: introduce new API, without changing anything" + * (commit ID 2d3854a37e8b). + */ +typedef cpumask_t cpumask_var_t[1]; +#define cpumask_bits(maskp) ((maskp)->bits) +#ifdef CONFIG_CPUMASK_OFFSTACK +/* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, + * not all bits may be allocated. */ +#define nr_cpumask_bits nr_cpu_ids +#else +#define nr_cpumask_bits NR_CPUS +#endif + +#ifdef CONFIG_CPUMASK_OFFSTACK +bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags); +void free_cpumask_var(cpumask_var_t mask); +#else +static inline void free_cpumask_var(cpumask_var_t mask) +{ +} + +static inline bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) +{ + return true; +} +#endif + +/* verify cpu argument to cpumask_* operators */ +static inline unsigned int cpumask_check(unsigned int cpu) +{ +#ifdef CONFIG_DEBUG_PER_CPU_MAPS + WARN_ON_ONCE(cpu >= nr_cpumask_bits); +#endif /* CONFIG_DEBUG_PER_CPU_MAPS */ + return cpu; +} + +/** + * cpumask_next - get the next cpu in a cpumask + * @n: the cpu prior to the place to search (ie. return will be > @n) + * @srcp: the cpumask pointer + * + * Returns >= nr_cpu_ids if no further cpus set. + */ +static inline unsigned int cpumask_next(int n, const cpumask_t *srcp) +{ + /* -1 is a legal arg here. */ + if (n != -1) + cpumask_check(n); + return find_next_bit(cpumask_bits(srcp), nr_cpumask_bits, n+1); +} + +/** + * for_each_cpu - iterate over every cpu in a mask + * @cpu: the (optionally unsigned) integer iterator + * @mask: the cpumask pointer + * + * After the loop, cpu is >= nr_cpu_ids. + */ +#define for_each_cpu(cpu, mask) \ + for ((cpu) = -1; \ + (cpu) = cpumask_next((cpu), (mask)), \ + (cpu) < nr_cpu_ids;) + +/** + * cpumask_set_cpu - set a cpu in a cpumask + * @cpu: cpu number (< nr_cpu_ids) + * @dstp: the cpumask pointer + */ +static inline void cpumask_set_cpu(unsigned int cpu, cpumask_t *dstp) +{ + set_bit(cpu, cpumask_bits(dstp)); +} + +/** + * cpumask_copy - *dstp = *srcp + * @dstp: the result + * @srcp: the input cpumask + */ +static inline void cpumask_copy(cpumask_t *dstp, + const cpumask_t *srcp) +{ + bitmap_copy(cpumask_bits(dstp), cpumask_bits(srcp), nr_cpumask_bits); +} + +/** + * cpumask_setall - set all cpus (< nr_cpu_ids) in a cpumask + * @dstp: the cpumask pointer + */ +static inline void cpumask_setall(cpumask_t *dstp) +{ + bitmap_fill(cpumask_bits(dstp), nr_cpumask_bits); +} + +/** + * cpumask_equal - *src1p == *src2p + * @src1p: the first input + * @src2p: the second input + */ +static inline bool cpumask_equal(const cpumask_t *src1p, + const cpumask_t *src2p) +{ + return bitmap_equal(cpumask_bits(src1p), cpumask_bits(src2p), + nr_cpumask_bits); +} +#endif + /* */ #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 9, 0) && \ @@ -52,4 +208,47 @@ static inline int vfs_fsync_backport(struct file *file, int datasync) #define vfs_fsync vfs_fsync_backport #endif +/* */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) +#ifndef RHEL_RELEASE_CODE +typedef _Bool bool; +#endif +#define true 1 +#define false 0 +#endif + +/* */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32) +#define lockdep_assert_held(l) do { (void)(l); } while (0) +#endif + +/* */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) +/* + * See also patch "fix abuses of ptrdiff_t" (commit ID + * 142956af525002c5378e7d91d81a01189841a785). + */ +typedef unsigned long uintptr_t; +#endif + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) +char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap); +#endif + +/* */ + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) +/* + * See also patch "[SCSI] bidirectional command support" + * (commit ID 6f9a35e2dafa). + */ +static inline int scsi_bidi_cmnd(struct scsi_cmnd *cmd) +{ + return false; +} +#endif + #endif /* _SCST_BACKPORT_H_ */ diff --git a/scst/include/scst.h b/scst/include/scst.h index 8c00799fe..916625725 100644 --- a/scst/include/scst.h +++ b/scst/include/scst.h @@ -71,195 +71,12 @@ #include #endif -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) -#define smp_mb__after_atomic_inc smp_mb__after_atomic -#define smp_mb__after_clear_bit smp_mb__after_atomic -#define smp_mb__before_atomic_dec smp_mb__before_atomic -#define smp_mb__after_atomic_dec smp_mb__after_atomic -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19) -#ifndef RHEL_RELEASE_CODE -typedef _Bool bool; -#endif -#define true 1 -#define false 0 -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 21) -#ifndef __packed -#define __packed __attribute__((packed)) -#endif -#ifndef __aligned -#define __aligned(x) __attribute__((aligned(x))) -#endif -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 22) -char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap); -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32) -#define lockdep_assert_held(l) do { (void)(l); } while (0) -#endif - -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 32) -#ifndef O_DSYNC -#define O_DSYNC O_SYNC -#endif -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26) -/* - * See also patch "Move ACCESS_ONCE() to " (commit ID - * 9c3cdc1f83a6e07092392ff4aba6466517dbd1d0). - */ -#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x)) -#endif - #ifdef INSIDE_KERNEL_TREE #include #else #include "scst_sgv.h" #endif -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 20) -#ifndef __printf -#define __printf(a, b) __attribute__((format(printf,a,b))) -#endif -#endif - -#if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 20) && !defined(BACKPORT_LINUX_CPUMASK_H) -#define nr_cpu_ids NR_CPUS -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) -/* - * See also patch "fix abuses of ptrdiff_t" (commit ID - * 142956af525002c5378e7d91d81a01189841a785). - */ -typedef unsigned long uintptr_t; -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) -/* - * See also patch "[SCSI] bidirectional command support" - * (commit ID 6f9a35e2dafa). - */ -static inline int scsi_bidi_cmnd(struct scsi_cmnd *cmd) -{ - return false; -} -#endif - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 28) && defined(__LINUX_CPUMASK_H) -/* - * See also patch "cpumask: introduce new API, without changing anything" - * (commit ID 2d3854a37e8b). - */ -typedef cpumask_t cpumask_var_t[1]; -#define cpumask_bits(maskp) ((maskp)->bits) -#ifdef CONFIG_CPUMASK_OFFSTACK -/* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also, - * not all bits may be allocated. */ -#define nr_cpumask_bits nr_cpu_ids -#else -#define nr_cpumask_bits NR_CPUS -#endif - -#ifdef CONFIG_CPUMASK_OFFSTACK -bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags); -void free_cpumask_var(cpumask_var_t mask); -#else -static inline void free_cpumask_var(cpumask_var_t mask) -{ -} - -static inline bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) -{ - return true; -} -#endif - -/* verify cpu argument to cpumask_* operators */ -static inline unsigned int cpumask_check(unsigned int cpu) -{ -#ifdef CONFIG_DEBUG_PER_CPU_MAPS - WARN_ON_ONCE(cpu >= nr_cpumask_bits); -#endif /* CONFIG_DEBUG_PER_CPU_MAPS */ - return cpu; -} - -/** - * cpumask_next - get the next cpu in a cpumask - * @n: the cpu prior to the place to search (ie. return will be > @n) - * @srcp: the cpumask pointer - * - * Returns >= nr_cpu_ids if no further cpus set. - */ -static inline unsigned int cpumask_next(int n, const cpumask_t *srcp) -{ - /* -1 is a legal arg here. */ - if (n != -1) - cpumask_check(n); - return find_next_bit(cpumask_bits(srcp), nr_cpumask_bits, n+1); -} - -/** - * for_each_cpu - iterate over every cpu in a mask - * @cpu: the (optionally unsigned) integer iterator - * @mask: the cpumask pointer - * - * After the loop, cpu is >= nr_cpu_ids. - */ -#define for_each_cpu(cpu, mask) \ - for ((cpu) = -1; \ - (cpu) = cpumask_next((cpu), (mask)), \ - (cpu) < nr_cpu_ids;) - -/** - * cpumask_set_cpu - set a cpu in a cpumask - * @cpu: cpu number (< nr_cpu_ids) - * @dstp: the cpumask pointer - */ -static inline void cpumask_set_cpu(unsigned int cpu, cpumask_t *dstp) -{ - set_bit(cpu, cpumask_bits(dstp)); -} - -/** - * cpumask_copy - *dstp = *srcp - * @dstp: the result - * @srcp: the input cpumask - */ -static inline void cpumask_copy(cpumask_t *dstp, - const cpumask_t *srcp) -{ - bitmap_copy(cpumask_bits(dstp), cpumask_bits(srcp), nr_cpumask_bits); -} - -/** - * cpumask_setall - set all cpus (< nr_cpu_ids) in a cpumask - * @dstp: the cpumask pointer - */ -static inline void cpumask_setall(cpumask_t *dstp) -{ - bitmap_fill(cpumask_bits(dstp), nr_cpumask_bits); -} - -/** - * cpumask_equal - *src1p == *src2p - * @src1p: the first input - * @src2p: the second input - */ -static inline bool cpumask_equal(const cpumask_t *src1p, - const cpumask_t *src2p) -{ - return bitmap_equal(cpumask_bits(src1p), cpumask_bits(src2p), - nr_cpumask_bits); -} -#endif - #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26) && \ (!defined(RHEL_MAJOR) || RHEL_MAJOR -0 < 6) #define set_cpus_allowed_ptr(p, new_mask) set_cpus_allowed((p), *(new_mask))