diff options
author | Tony Luck <tony.luck@intel.com> | 2005-10-20 13:41:44 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-10-20 13:41:44 -0400 |
commit | 9cec58dc138d6fcad9f447a19c8ff69f6540e667 (patch) | |
tree | 4fe1cca94fdba8b705c87615bee06d3346f687ce /lib | |
parent | 17e5ad6c0ce5a970e2830d0de8bdd60a2f077d38 (diff) | |
parent | ac9b9c667c2e1194e22ebe0a441ae1c37aaa9b90 (diff) |
Update from upstream with manual merge of Yasunori Goto's
changes to swiotlb.c made in commit 281dd25cdc0d6903929b79183816d151ea626341
since this file has been moved from arch/ia64/lib/swiotlb.c to
lib/swiotlb.c
Signed-off-by: Tony Luck <tony.luck@intel.com>
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 00000000000..3bef1ea94c9 --- /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 2377af057d0..305a9663aee 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 6a8bc6e0643..d1c057e71b6 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 c2fc470b6ed..5bdeaaea57f 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 2cc79112ecc..8a8b3a16133 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 d27c0a07294..ca3211206ee 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 73266b97558..7fd45451b44 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; |