diff options
author | Takashi Iwai <tiwai@suse.de> | 2005-10-10 05:56:31 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-11-04 07:18:00 -0500 |
commit | b1d5776d865951c213a1caaab5d8bf5de7615dbd (patch) | |
tree | f999dca30f6e2d03a9176b86c613ae8f4531a6d6 /sound/core/memory.c | |
parent | 93f2e37840a9a7c3693ca6961fe6ad46b250f3b9 (diff) |
[ALSA] Remove vmalloc wrapper, kfree_nocheck()
- Remove vmalloc wrapper
- Add release_and_free_resource() to remove kfree_nocheck() from each driver
and simplify the code
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/core/memory.c')
-rw-r--r-- | sound/core/memory.c | 53 |
1 files changed, 0 insertions, 53 deletions
diff --git a/sound/core/memory.c b/sound/core/memory.c index 7d8e2eebba51..b99343616f81 100644 --- a/sound/core/memory.c +++ b/sound/core/memory.c | |||
@@ -47,19 +47,14 @@ struct snd_alloc_track { | |||
47 | #define snd_alloc_track_entry(obj) (struct snd_alloc_track *)((char*)obj - (unsigned long)((struct snd_alloc_track *)0)->data) | 47 | #define snd_alloc_track_entry(obj) (struct snd_alloc_track *)((char*)obj - (unsigned long)((struct snd_alloc_track *)0)->data) |
48 | 48 | ||
49 | static long snd_alloc_kmalloc; | 49 | static long snd_alloc_kmalloc; |
50 | static long snd_alloc_vmalloc; | ||
51 | static LIST_HEAD(snd_alloc_kmalloc_list); | 50 | static LIST_HEAD(snd_alloc_kmalloc_list); |
52 | static LIST_HEAD(snd_alloc_vmalloc_list); | ||
53 | static DEFINE_SPINLOCK(snd_alloc_kmalloc_lock); | 51 | static DEFINE_SPINLOCK(snd_alloc_kmalloc_lock); |
54 | static DEFINE_SPINLOCK(snd_alloc_vmalloc_lock); | ||
55 | #define KMALLOC_MAGIC 0x87654321 | 52 | #define KMALLOC_MAGIC 0x87654321 |
56 | #define VMALLOC_MAGIC 0x87654320 | ||
57 | static snd_info_entry_t *snd_memory_info_entry; | 53 | static snd_info_entry_t *snd_memory_info_entry; |
58 | 54 | ||
59 | void __init snd_memory_init(void) | 55 | void __init snd_memory_init(void) |
60 | { | 56 | { |
61 | snd_alloc_kmalloc = 0; | 57 | snd_alloc_kmalloc = 0; |
62 | snd_alloc_vmalloc = 0; | ||
63 | } | 58 | } |
64 | 59 | ||
65 | void snd_memory_done(void) | 60 | void snd_memory_done(void) |
@@ -69,8 +64,6 @@ void snd_memory_done(void) | |||
69 | 64 | ||
70 | if (snd_alloc_kmalloc > 0) | 65 | if (snd_alloc_kmalloc > 0) |
71 | snd_printk(KERN_ERR "Not freed snd_alloc_kmalloc = %li\n", snd_alloc_kmalloc); | 66 | snd_printk(KERN_ERR "Not freed snd_alloc_kmalloc = %li\n", snd_alloc_kmalloc); |
72 | if (snd_alloc_vmalloc > 0) | ||
73 | snd_printk(KERN_ERR "Not freed snd_alloc_vmalloc = %li\n", snd_alloc_vmalloc); | ||
74 | list_for_each_prev(head, &snd_alloc_kmalloc_list) { | 67 | list_for_each_prev(head, &snd_alloc_kmalloc_list) { |
75 | t = list_entry(head, struct snd_alloc_track, list); | 68 | t = list_entry(head, struct snd_alloc_track, list); |
76 | if (t->magic != KMALLOC_MAGIC) { | 69 | if (t->magic != KMALLOC_MAGIC) { |
@@ -79,14 +72,6 @@ void snd_memory_done(void) | |||
79 | } | 72 | } |
80 | snd_printk(KERN_ERR "kmalloc(%ld) from %p not freed\n", (long) t->size, t->caller); | 73 | snd_printk(KERN_ERR "kmalloc(%ld) from %p not freed\n", (long) t->size, t->caller); |
81 | } | 74 | } |
82 | list_for_each_prev(head, &snd_alloc_vmalloc_list) { | ||
83 | t = list_entry(head, struct snd_alloc_track, list); | ||
84 | if (t->magic != VMALLOC_MAGIC) { | ||
85 | snd_printk(KERN_ERR "Corrupted vmalloc\n"); | ||
86 | break; | ||
87 | } | ||
88 | snd_printk(KERN_ERR "vmalloc(%ld) from %p not freed\n", (long) t->size, t->caller); | ||
89 | } | ||
90 | } | 75 | } |
91 | 76 | ||
92 | static void *__snd_kmalloc(size_t size, gfp_t flags, void *caller) | 77 | static void *__snd_kmalloc(size_t size, gfp_t flags, void *caller) |
@@ -153,43 +138,6 @@ void snd_hidden_kfree(const void *obj) | |||
153 | snd_wrapper_kfree(obj); | 138 | snd_wrapper_kfree(obj); |
154 | } | 139 | } |
155 | 140 | ||
156 | void *snd_hidden_vmalloc(unsigned long size) | ||
157 | { | ||
158 | void *ptr; | ||
159 | ptr = snd_wrapper_vmalloc(size + sizeof(struct snd_alloc_track)); | ||
160 | if (ptr) { | ||
161 | struct snd_alloc_track *t = (struct snd_alloc_track *)ptr; | ||
162 | t->magic = VMALLOC_MAGIC; | ||
163 | t->caller = __builtin_return_address(0); | ||
164 | spin_lock(&snd_alloc_vmalloc_lock); | ||
165 | list_add_tail(&t->list, &snd_alloc_vmalloc_list); | ||
166 | spin_unlock(&snd_alloc_vmalloc_lock); | ||
167 | t->size = size; | ||
168 | snd_alloc_vmalloc += size; | ||
169 | ptr = t->data; | ||
170 | } | ||
171 | return ptr; | ||
172 | } | ||
173 | |||
174 | void snd_hidden_vfree(void *obj) | ||
175 | { | ||
176 | struct snd_alloc_track *t; | ||
177 | if (obj == NULL) | ||
178 | return; | ||
179 | t = snd_alloc_track_entry(obj); | ||
180 | if (t->magic != VMALLOC_MAGIC) { | ||
181 | snd_printk(KERN_ERR "bad vfree (called from %p)\n", __builtin_return_address(0)); | ||
182 | return; | ||
183 | } | ||
184 | spin_lock(&snd_alloc_vmalloc_lock); | ||
185 | list_del(&t->list); | ||
186 | spin_unlock(&snd_alloc_vmalloc_lock); | ||
187 | t->magic = 0; | ||
188 | snd_alloc_vmalloc -= t->size; | ||
189 | obj = t; | ||
190 | snd_wrapper_vfree(obj); | ||
191 | } | ||
192 | |||
193 | char *snd_hidden_kstrdup(const char *s, gfp_t flags) | 141 | char *snd_hidden_kstrdup(const char *s, gfp_t flags) |
194 | { | 142 | { |
195 | int len; | 143 | int len; |
@@ -207,7 +155,6 @@ char *snd_hidden_kstrdup(const char *s, gfp_t flags) | |||
207 | static void snd_memory_info_read(snd_info_entry_t *entry, snd_info_buffer_t * buffer) | 155 | static void snd_memory_info_read(snd_info_entry_t *entry, snd_info_buffer_t * buffer) |
208 | { | 156 | { |
209 | snd_iprintf(buffer, "kmalloc: %li bytes\n", snd_alloc_kmalloc); | 157 | snd_iprintf(buffer, "kmalloc: %li bytes\n", snd_alloc_kmalloc); |
210 | snd_iprintf(buffer, "vmalloc: %li bytes\n", snd_alloc_vmalloc); | ||
211 | } | 158 | } |
212 | 159 | ||
213 | int __init snd_memory_info_init(void) | 160 | int __init snd_memory_info_init(void) |