diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/.gitignore | 6 | ||||
| -rw-r--r-- | lib/dec_and_lock.c | 35 | ||||
| -rw-r--r-- | lib/radix-tree.c | 2 | ||||
| -rw-r--r-- | lib/swiotlb.c | 4 | ||||
| -rw-r--r-- | lib/ts_bm.c | 2 | ||||
| -rw-r--r-- | lib/ts_fsm.c | 2 | ||||
| -rw-r--r-- | lib/ts_kmp.c | 2 |
7 files changed, 47 insertions, 6 deletions
diff --git a/lib/.gitignore b/lib/.gitignore new file mode 100644 index 000000000000..3bef1ea94c99 --- /dev/null +++ b/lib/.gitignore | |||
| @@ -0,0 +1,6 @@ | |||
| 1 | # | ||
| 2 | # Generated files | ||
| 3 | # | ||
| 4 | gen_crc32table | ||
| 5 | crc32table.h | ||
| 6 | |||
diff --git a/lib/dec_and_lock.c b/lib/dec_and_lock.c index 2377af057d09..305a9663aee3 100644 --- a/lib/dec_and_lock.c +++ b/lib/dec_and_lock.c | |||
| @@ -1,7 +1,41 @@ | |||
| 1 | #include <linux/module.h> | 1 | #include <linux/module.h> |
| 2 | #include <linux/spinlock.h> | 2 | #include <linux/spinlock.h> |
| 3 | #include <asm/atomic.h> | 3 | #include <asm/atomic.h> |
| 4 | #include <asm/system.h> | ||
| 4 | 5 | ||
| 6 | #ifdef __HAVE_ARCH_CMPXCHG | ||
| 7 | /* | ||
| 8 | * This is an implementation of the notion of "decrement a | ||
| 9 | * reference count, and return locked if it decremented to zero". | ||
| 10 | * | ||
| 11 | * This implementation can be used on any architecture that | ||
| 12 | * has a cmpxchg, and where atomic->value is an int holding | ||
| 13 | * the value of the atomic (i.e. the high bits aren't used | ||
| 14 | * for a lock or anything like that). | ||
| 15 | */ | ||
| 16 | int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock) | ||
| 17 | { | ||
| 18 | int counter; | ||
| 19 | int newcount; | ||
| 20 | |||
| 21 | for (;;) { | ||
| 22 | counter = atomic_read(atomic); | ||
| 23 | newcount = counter - 1; | ||
| 24 | if (!newcount) | ||
| 25 | break; /* do it the slow way */ | ||
| 26 | |||
| 27 | newcount = cmpxchg(&atomic->counter, counter, newcount); | ||
| 28 | if (newcount == counter) | ||
| 29 | return 0; | ||
| 30 | } | ||
| 31 | |||
| 32 | spin_lock(lock); | ||
| 33 | if (atomic_dec_and_test(atomic)) | ||
| 34 | return 1; | ||
| 35 | spin_unlock(lock); | ||
| 36 | return 0; | ||
| 37 | } | ||
| 38 | #else | ||
| 5 | /* | 39 | /* |
| 6 | * This is an architecture-neutral, but slow, | 40 | * This is an architecture-neutral, but slow, |
| 7 | * implementation of the notion of "decrement | 41 | * implementation of the notion of "decrement |
| @@ -33,5 +67,6 @@ int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock) | |||
| 33 | spin_unlock(lock); | 67 | spin_unlock(lock); |
| 34 | return 0; | 68 | return 0; |
| 35 | } | 69 | } |
| 70 | #endif | ||
| 36 | 71 | ||
| 37 | EXPORT_SYMBOL(_atomic_dec_and_lock); | 72 | EXPORT_SYMBOL(_atomic_dec_and_lock); |
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 6a8bc6e06431..d1c057e71b68 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c | |||
| @@ -110,7 +110,7 @@ radix_tree_node_free(struct radix_tree_node *node) | |||
| 110 | * success, return zero, with preemption disabled. On error, return -ENOMEM | 110 | * success, return zero, with preemption disabled. On error, return -ENOMEM |
| 111 | * with preemption not disabled. | 111 | * with preemption not disabled. |
| 112 | */ | 112 | */ |
| 113 | int radix_tree_preload(unsigned int __nocast gfp_mask) | 113 | int radix_tree_preload(gfp_t gfp_mask) |
| 114 | { | 114 | { |
| 115 | struct radix_tree_preload *rtp; | 115 | struct radix_tree_preload *rtp; |
| 116 | struct radix_tree_node *node; | 116 | struct radix_tree_node *node; |
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index c2fc470b6ed8..5bdeaaea57fd 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
| @@ -142,8 +142,8 @@ swiotlb_init_with_default_size (size_t default_size) | |||
| 142 | /* | 142 | /* |
| 143 | * Get IO TLB memory from the low pages | 143 | * Get IO TLB memory from the low pages |
| 144 | */ | 144 | */ |
| 145 | io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs * | 145 | io_tlb_start = alloc_bootmem_low_pages_limit(io_tlb_nslabs * |
| 146 | (1 << IO_TLB_SHIFT)); | 146 | (1 << IO_TLB_SHIFT), 0x100000000); |
| 147 | if (!io_tlb_start) | 147 | if (!io_tlb_start) |
| 148 | panic("Cannot allocate SWIOTLB buffer"); | 148 | panic("Cannot allocate SWIOTLB buffer"); |
| 149 | io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT); | 149 | io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT); |
diff --git a/lib/ts_bm.c b/lib/ts_bm.c index 2cc79112ecc3..8a8b3a16133e 100644 --- a/lib/ts_bm.c +++ b/lib/ts_bm.c | |||
| @@ -127,7 +127,7 @@ static void compute_prefix_tbl(struct ts_bm *bm, const u8 *pattern, | |||
| 127 | } | 127 | } |
| 128 | 128 | ||
| 129 | static struct ts_config *bm_init(const void *pattern, unsigned int len, | 129 | static struct ts_config *bm_init(const void *pattern, unsigned int len, |
| 130 | int gfp_mask) | 130 | gfp_t gfp_mask) |
| 131 | { | 131 | { |
| 132 | struct ts_config *conf; | 132 | struct ts_config *conf; |
| 133 | struct ts_bm *bm; | 133 | struct ts_bm *bm; |
diff --git a/lib/ts_fsm.c b/lib/ts_fsm.c index d27c0a072940..ca3211206eef 100644 --- a/lib/ts_fsm.c +++ b/lib/ts_fsm.c | |||
| @@ -258,7 +258,7 @@ found_match: | |||
| 258 | } | 258 | } |
| 259 | 259 | ||
| 260 | static struct ts_config *fsm_init(const void *pattern, unsigned int len, | 260 | static struct ts_config *fsm_init(const void *pattern, unsigned int len, |
| 261 | int gfp_mask) | 261 | gfp_t gfp_mask) |
| 262 | { | 262 | { |
| 263 | int i, err = -EINVAL; | 263 | int i, err = -EINVAL; |
| 264 | struct ts_config *conf; | 264 | struct ts_config *conf; |
diff --git a/lib/ts_kmp.c b/lib/ts_kmp.c index 73266b975585..7fd45451b44a 100644 --- a/lib/ts_kmp.c +++ b/lib/ts_kmp.c | |||
| @@ -87,7 +87,7 @@ static inline void compute_prefix_tbl(const u8 *pattern, unsigned int len, | |||
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | static struct ts_config *kmp_init(const void *pattern, unsigned int len, | 89 | static struct ts_config *kmp_init(const void *pattern, unsigned int len, |
| 90 | int gfp_mask) | 90 | gfp_t gfp_mask) |
| 91 | { | 91 | { |
| 92 | struct ts_config *conf; | 92 | struct ts_config *conf; |
| 93 | struct ts_kmp *kmp; | 93 | struct ts_kmp *kmp; |
