serial: PL011: clear pending interrupts
[linux-flexiantxendom0.git] / mm / util.c
1 #include <linux/mm.h>
2 #include <linux/slab.h>
3 #include <linux/string.h>
4 #include <linux/export.h>
5 #include <linux/err.h>
6 #include <linux/sched.h>
7 #include <asm/uaccess.h>
8
9 #include "internal.h"
10
11 #define CREATE_TRACE_POINTS
12 #include <trace/events/kmem.h>
13
14 /* No sane architecture will #define these to anything else */
15 #ifndef arch_add_exec_range
16 #define arch_add_exec_range(mm, limit)  do { ; } while (0)
17 #endif
18
19 /**
20  * kstrdup - allocate space for and copy an existing string
21  * @s: the string to duplicate
22  * @gfp: the GFP mask used in the kmalloc() call when allocating memory
23  */
24 char *kstrdup(const char *s, gfp_t gfp)
25 {
26         size_t len;
27         char *buf;
28
29         if (!s)
30                 return NULL;
31
32         len = strlen(s) + 1;
33         buf = kmalloc_track_caller(len, gfp);
34         if (buf)
35                 memcpy(buf, s, len);
36         return buf;
37 }
38 EXPORT_SYMBOL(kstrdup);
39
40 /**
41  * kstrndup - allocate space for and copy an existing string
42  * @s: the string to duplicate
43  * @max: read at most @max chars from @s
44  * @gfp: the GFP mask used in the kmalloc() call when allocating memory
45  */
46 char *kstrndup(const char *s, size_t max, gfp_t gfp)
47 {
48         size_t len;
49         char *buf;
50
51         if (!s)
52                 return NULL;
53
54         len = strnlen(s, max);
55         buf = kmalloc_track_caller(len+1, gfp);
56         if (buf) {
57                 memcpy(buf, s, len);
58                 buf[len] = '\0';
59         }
60         return buf;
61 }
62 EXPORT_SYMBOL(kstrndup);
63
64 /**
65  * kmemdup - duplicate region of memory
66  *
67  * @src: memory region to duplicate
68  * @len: memory region length
69  * @gfp: GFP mask to use
70  */
71 void *kmemdup(const void *src, size_t len, gfp_t gfp)
72 {
73         void *p;
74
75         p = kmalloc_track_caller(len, gfp);
76         if (p)
77                 memcpy(p, src, len);
78         return p;
79 }
80 EXPORT_SYMBOL(kmemdup);
81
82 /**
83  * memdup_user - duplicate memory region from user space
84  *
85  * @src: source address in user space
86  * @len: number of bytes to copy
87  *
88  * Returns an ERR_PTR() on failure.
89  */
90 void *memdup_user(const void __user *src, size_t len)
91 {
92         void *p;
93
94         /*
95          * Always use GFP_KERNEL, since copy_from_user() can sleep and
96          * cause pagefault, which makes it pointless to use GFP_NOFS
97          * or GFP_ATOMIC.
98          */
99         p = kmalloc_track_caller(len, GFP_KERNEL);
100         if (!p)
101                 return ERR_PTR(-ENOMEM);
102
103         if (copy_from_user(p, src, len)) {
104                 kfree(p);
105                 return ERR_PTR(-EFAULT);
106         }
107
108         return p;
109 }
110 EXPORT_SYMBOL(memdup_user);
111
112 /**
113  * __krealloc - like krealloc() but don't free @p.
114  * @p: object to reallocate memory for.
115  * @new_size: how many bytes of memory are required.
116  * @flags: the type of memory to allocate.
117  *
118  * This function is like krealloc() except it never frees the originally
119  * allocated buffer. Use this if you don't want to free the buffer immediately
120  * like, for example, with RCU.
121  */
122 void *__krealloc(const void *p, size_t new_size, gfp_t flags)
123 {
124         void *ret;
125         size_t ks = 0;
126
127         if (unlikely(!new_size))
128                 return ZERO_SIZE_PTR;
129
130         if (p)
131                 ks = ksize(p);
132
133         if (ks >= new_size)
134                 return (void *)p;
135
136         ret = kmalloc_track_caller(new_size, flags);
137         if (ret && p)
138                 memcpy(ret, p, ks);
139
140         return ret;
141 }
142 EXPORT_SYMBOL(__krealloc);
143
144 /**
145  * krealloc - reallocate memory. The contents will remain unchanged.
146  * @p: object to reallocate memory for.
147  * @new_size: how many bytes of memory are required.
148  * @flags: the type of memory to allocate.
149  *
150  * The contents of the object pointed to are preserved up to the
151  * lesser of the new and old sizes.  If @p is %NULL, krealloc()
152  * behaves exactly like kmalloc().  If @size is 0 and @p is not a
153  * %NULL pointer, the object pointed to is freed.
154  */
155 void *krealloc(const void *p, size_t new_size, gfp_t flags)
156 {
157         void *ret;
158
159         if (unlikely(!new_size)) {
160                 kfree(p);
161                 return ZERO_SIZE_PTR;
162         }
163
164         ret = __krealloc(p, new_size, flags);
165         if (ret && p != ret)
166                 kfree(p);
167
168         return ret;
169 }
170 EXPORT_SYMBOL(krealloc);
171
172 /**
173  * kzfree - like kfree but zero memory
174  * @p: object to free memory of
175  *
176  * The memory of the object @p points to is zeroed before freed.
177  * If @p is %NULL, kzfree() does nothing.
178  *
179  * Note: this function zeroes the whole allocated buffer which can be a good
180  * deal bigger than the requested buffer size passed to kmalloc(). So be
181  * careful when using this function in performance sensitive code.
182  */
183 void kzfree(const void *p)
184 {
185         size_t ks;
186         void *mem = (void *)p;
187
188         if (unlikely(ZERO_OR_NULL_PTR(mem)))
189                 return;
190         ks = ksize(mem);
191         memset(mem, 0, ks);
192         kfree(mem);
193 }
194 EXPORT_SYMBOL(kzfree);
195
196 /*
197  * strndup_user - duplicate an existing string from user space
198  * @s: The string to duplicate
199  * @n: Maximum number of bytes to copy, including the trailing NUL.
200  */
201 char *strndup_user(const char __user *s, long n)
202 {
203         char *p;
204         long length;
205
206         length = strnlen_user(s, n);
207
208         if (!length)
209                 return ERR_PTR(-EFAULT);
210
211         if (length > n)
212                 return ERR_PTR(-EINVAL);
213
214         p = memdup_user(s, length);
215
216         if (IS_ERR(p))
217                 return p;
218
219         p[length - 1] = '\0';
220
221         return p;
222 }
223 EXPORT_SYMBOL(strndup_user);
224
225 void __vma_link_list(struct mm_struct *mm, struct vm_area_struct *vma,
226                 struct vm_area_struct *prev, struct rb_node *rb_parent)
227 {
228         struct vm_area_struct *next;
229
230         vma->vm_prev = prev;
231         if (prev) {
232                 next = prev->vm_next;
233                 prev->vm_next = vma;
234         } else {
235                 mm->mmap = vma;
236                 if (rb_parent)
237                         next = rb_entry(rb_parent,
238                                         struct vm_area_struct, vm_rb);
239                 else
240                         next = NULL;
241         }
242         vma->vm_next = next;
243         if (next)
244                 next->vm_prev = vma;
245
246         if (vma->vm_flags & VM_EXEC)
247                 arch_add_exec_range(mm, vma->vm_end);
248 }
249
250 #if defined(CONFIG_MMU) && !defined(HAVE_ARCH_PICK_MMAP_LAYOUT)
251 void arch_pick_mmap_layout(struct mm_struct *mm)
252 {
253         mm->mmap_base = TASK_UNMAPPED_BASE;
254         mm->get_unmapped_area = arch_get_unmapped_area;
255         mm->unmap_area = arch_unmap_area;
256 }
257 #endif
258
259 /*
260  * Like get_user_pages_fast() except its IRQ-safe in that it won't fall
261  * back to the regular GUP.
262  * If the architecture not support this function, simply return with no
263  * page pinned
264  */
265 int __attribute__((weak)) __get_user_pages_fast(unsigned long start,
266                                  int nr_pages, int write, struct page **pages)
267 {
268         return 0;
269 }
270 EXPORT_SYMBOL_GPL(__get_user_pages_fast);
271
272 /**
273  * get_user_pages_fast() - pin user pages in memory
274  * @start:      starting user address
275  * @nr_pages:   number of pages from start to pin
276  * @write:      whether pages will be written to
277  * @pages:      array that receives pointers to the pages pinned.
278  *              Should be at least nr_pages long.
279  *
280  * Returns number of pages pinned. This may be fewer than the number
281  * requested. If nr_pages is 0 or negative, returns 0. If no pages
282  * were pinned, returns -errno.
283  *
284  * get_user_pages_fast provides equivalent functionality to get_user_pages,
285  * operating on current and current->mm, with force=0 and vma=NULL. However
286  * unlike get_user_pages, it must be called without mmap_sem held.
287  *
288  * get_user_pages_fast may take mmap_sem and page table locks, so no
289  * assumptions can be made about lack of locking. get_user_pages_fast is to be
290  * implemented in a way that is advantageous (vs get_user_pages()) when the
291  * user memory area is already faulted in and present in ptes. However if the
292  * pages have to be faulted in, it may turn out to be slightly slower so
293  * callers need to carefully consider what to use. On many architectures,
294  * get_user_pages_fast simply falls back to get_user_pages.
295  */
296 int __attribute__((weak)) get_user_pages_fast(unsigned long start,
297                                 int nr_pages, int write, struct page **pages)
298 {
299         struct mm_struct *mm = current->mm;
300         int ret;
301
302         down_read(&mm->mmap_sem);
303         ret = get_user_pages(current, mm, start, nr_pages,
304                                         write, 0, pages, NULL);
305         up_read(&mm->mmap_sem);
306
307         return ret;
308 }
309 EXPORT_SYMBOL_GPL(get_user_pages_fast);
310
311 /* Tracepoints definitions. */
312 EXPORT_TRACEPOINT_SYMBOL(kmalloc);
313 EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc);
314 EXPORT_TRACEPOINT_SYMBOL(kmalloc_node);
315 EXPORT_TRACEPOINT_SYMBOL(kmem_cache_alloc_node);
316 EXPORT_TRACEPOINT_SYMBOL(kfree);
317 EXPORT_TRACEPOINT_SYMBOL(kmem_cache_free);