2004-11-27 14:26:54

by Pekka Enberg

[permalink] [raw]
Subject: [PATCH] Document kfree and vfree NULL usage

Hi,

This patch adds comments for kfree() and vfree() stating that both accept
NULL pointers. I audited vfree() callers and there seems to be lots of
confusion over this in the kernel.

Signed-off-by: Pekka Enberg <[email protected]>
---

slab.c | 2 ++
vmalloc.c | 3 ++-
2 files changed, 4 insertions(+), 1 deletion(-)

Index: 2.6.10-rc2/mm/slab.c
===================================================================
--- 2.6.10-rc2.orig/mm/slab.c 2004-11-27 14:33:14.000000000 +0200
+++ 2.6.10-rc2/mm/slab.c 2004-11-27 16:12:54.573387384 +0200
@@ -2535,6 +2535,8 @@
* kfree - free previously allocated memory
* @objp: pointer returned by kmalloc.
*
+ * If @objp is NULL, no operation is performed.
+ *
* Don't free memory not originally allocated by kmalloc()
* or you will run into trouble.
*/
Index: 2.6.10-rc2/mm/vmalloc.c
===================================================================
--- 2.6.10-rc2.orig/mm/vmalloc.c 2004-11-27 16:13:48.026261312 +0200
+++ 2.6.10-rc2/mm/vmalloc.c 2004-11-27 16:14:04.875699808 +0200
@@ -389,7 +389,8 @@
* @addr: memory base address
*
* Free the virtually contiguous memory area starting at @addr, as
- * obtained from vmalloc(), vmalloc_32() or __vmalloc().
+ * obtained from vmalloc(), vmalloc_32() or __vmalloc(). If @addr is
+ * NULL, no operation is performed.
*
* May not be called in interrupt context.
*/



2004-11-27 17:15:59

by Marcel Sebek

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sat, Nov 27, 2004 at 04:26:00PM +0200, Pekka Enberg wrote:
> Hi,
>
> This patch adds comments for kfree() and vfree() stating that both accept
> NULL pointers. I audited vfree() callers and there seems to be lots of
> confusion over this in the kernel.
>

I've cleaned up sound/ directory from "if (x) {k/v}free(x);" and similar
constructions. I'm going to to this for most of the kernel if I found
some time.

This patch is against 2.6.10-rc2 but applies cleanly to bk9 too.

Signed-off-by: Marcel Sebek <[email protected]>

diff -urpN linux-2.6.10-rc2/sound/core/info.c linux-2.6.10-rc2.changed/sound/core/info.c
--- linux-2.6.10-rc2/sound/core/info.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/info.c 2004-11-27 16:37:18.000000000 +0100
@@ -895,8 +895,7 @@ void snd_info_free_entry(snd_info_entry_
{
if (entry == NULL)
return;
- if (entry->name)
- kfree((char *)entry->name);
+ kfree(entry->name);
if (entry->private_free)
entry->private_free(entry);
kfree(entry);
diff -urpN linux-2.6.10-rc2/sound/core/init.c linux-2.6.10-rc2.changed/sound/core/init.c
--- linux-2.6.10-rc2/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/init.c 2004-11-27 16:43:35.000000000 +0100
@@ -665,9 +665,8 @@ int snd_card_file_remove(snd_card_t *car
spin_unlock(&card->files_lock);
if (card->files == NULL)
wake_up(&card->shutdown_sleep);
- if (mfile) {
- kfree(mfile);
- } else {
+ kfree(mfile);
+ if (!mfile) {
snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
return -ENOENT;
}
diff -urpN linux-2.6.10-rc2/sound/core/ioctl32/ioctl32.c linux-2.6.10-rc2.changed/sound/core/ioctl32/ioctl32.c
--- linux-2.6.10-rc2/sound/core/ioctl32/ioctl32.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/ioctl32/ioctl32.c 2004-11-27 16:39:48.000000000 +0100
@@ -370,10 +370,8 @@ static inline int _snd_ioctl32_ctl_elem_
if (copy_to_user((void __user *)arg, data32, sizeof(*data32)))
err = -EFAULT;
__end:
- if (data32)
- kfree(data32);
- if (data)
- kfree(data);
+ kfree(data32);
+ kfree(data);
return err;
}

diff -urpN linux-2.6.10-rc2/sound/core/ioctl32/ioctl32.h linux-2.6.10-rc2.changed/sound/core/ioctl32/ioctl32.h
--- linux-2.6.10-rc2/sound/core/ioctl32/ioctl32.h 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/ioctl32/ioctl32.h 2004-11-27 16:40:07.000000000 +0100
@@ -103,10 +103,8 @@ static inline int _snd_ioctl32_##type(un
err = -EFAULT;\
}\
__end:\
- if (data)\
- kfree(data);\
- if (data32)\
- kfree(data32);\
+ kfree(data);\
+ kfree(data32);\
return err;\
}

diff -urpN linux-2.6.10-rc2/sound/core/ioctl32/pcm32.c linux-2.6.10-rc2.changed/sound/core/ioctl32/pcm32.c
--- linux-2.6.10-rc2/sound/core/ioctl32/pcm32.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/ioctl32/pcm32.c 2004-11-27 16:39:17.000000000 +0100
@@ -224,10 +224,8 @@ static inline int _snd_ioctl32_pcm_hw_pa
else
recalculate_boundary(file);
__end:
- if (data)
- kfree(data);
- if (data32)
- kfree(data32);
+ kfree(data);
+ kfree(data32);
return err;
}

@@ -432,10 +430,8 @@ static inline int _snd_ioctl32_pcm_hw_pa
else
recalculate_boundary(file);
__end:
- if (data)
- kfree(data);
- if (data32)
- kfree(data32);
+ kfree(data);
+ kfree(data32);
return err;
}

diff -urpN linux-2.6.10-rc2/sound/core/oss/mixer_oss.c linux-2.6.10-rc2.changed/sound/core/oss/mixer_oss.c
--- linux-2.6.10-rc2/sound/core/oss/mixer_oss.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/oss/mixer_oss.c 2004-11-27 17:06:02.000000000 +0100
@@ -527,10 +527,8 @@ static void snd_mixer_oss_get_volume1_vo
*right = snd_mixer_oss_conv1(uctl->value.integer.value[1], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[1]);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static void snd_mixer_oss_get_volume1_sw(snd_mixer_oss_file_t *fmixer,
@@ -566,10 +564,8 @@ static void snd_mixer_oss_get_volume1_sw
*right = 0;
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static int snd_mixer_oss_get_volume1(snd_mixer_oss_file_t *fmixer,
@@ -628,10 +624,8 @@ static void snd_mixer_oss_put_volume1_vo
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static void snd_mixer_oss_put_volume1_sw(snd_mixer_oss_file_t *fmixer,
@@ -673,10 +667,8 @@ static void snd_mixer_oss_put_volume1_sw
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static int snd_mixer_oss_put_volume1(snd_mixer_oss_file_t *fmixer,
@@ -802,10 +794,8 @@ static int snd_mixer_oss_get_recsrc2(snd
err = 0;
__unlock:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
return err;
}

@@ -853,10 +843,8 @@ static int snd_mixer_oss_put_recsrc2(snd
err = 0;
__unlock:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
return err;
}

diff -urpN linux-2.6.10-rc2/sound/core/oss/pcm_oss.c linux-2.6.10-rc2.changed/sound/core/oss/pcm_oss.c
--- linux-2.6.10-rc2/sound/core/oss/pcm_oss.c 2004-11-27 17:06:17.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/oss/pcm_oss.c 2004-11-27 17:07:02.000000000 +0100
@@ -513,8 +513,7 @@ static int snd_pcm_oss_change_params(snd

runtime->oss.params = 0;
runtime->oss.prepare = 1;
- if (runtime->oss.buffer != NULL)
- vfree(runtime->oss.buffer);
+ vfree(runtime->oss.buffer);
runtime->oss.buffer = vmalloc(runtime->oss.period_bytes);
runtime->oss.buffer_used = 0;
if (runtime->dma_area)
@@ -524,12 +523,9 @@ static int snd_pcm_oss_change_params(snd

err = 0;
failure:
- if (sw_params)
- kfree(sw_params);
- if (params)
- kfree(params);
- if (sparams)
- kfree(sparams);
+ kfree(sw_params);
+ kfree(params);
+ kfree(sparams);
return err;
}

@@ -1671,8 +1667,7 @@ static void snd_pcm_oss_release_substrea
{
snd_pcm_runtime_t *runtime;
runtime = substream->runtime;
- if (runtime->oss.buffer)
- vfree(runtime->oss.buffer);
+ vfree(runtime->oss.buffer);
snd_pcm_oss_plugin_clear(substream);
substream->oss.file = NULL;
substream->oss.oss = 0;
diff -urpN linux-2.6.10-rc2/sound/core/oss/pcm_plugin.c linux-2.6.10-rc2.changed/sound/core/oss/pcm_plugin.c
--- linux-2.6.10-rc2/sound/core/oss/pcm_plugin.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/oss/pcm_plugin.c 2004-11-27 17:09:18.000000000 +0100
@@ -86,8 +86,7 @@ static int snd_pcm_plugin_alloc(snd_pcm_
snd_assert((size % 8) == 0, return -ENXIO);
size /= 8;
if (plugin->buf_frames < frames) {
- if (plugin->buf)
- vfree(plugin->buf);
+ vfree(plugin->buf);
plugin->buf = vmalloc(size);
plugin->buf_frames = frames;
}
@@ -217,14 +216,10 @@ int snd_pcm_plugin_free(snd_pcm_plugin_t
return 0;
if (plugin->private_free)
plugin->private_free(plugin);
- if (plugin->buf_channels)
- kfree(plugin->buf_channels);
- if (plugin->buf)
- vfree(plugin->buf);
- if (plugin->src_vmask)
- kfree(plugin->src_vmask);
- if (plugin->dst_vmask)
- kfree(plugin->dst_vmask);
+ kfree(plugin->buf_channels);
+ vfree(plugin->buf);
+ kfree(plugin->src_vmask);
+ kfree(plugin->dst_vmask);
kfree(plugin);
return 0;
}
diff -urpN linux-2.6.10-rc2/sound/core/oss/route.c linux-2.6.10-rc2.changed/sound/core/oss/route.c
--- linux-2.6.10-rc2/sound/core/oss/route.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/oss/route.c 2004-11-27 17:08:14.000000000 +0100
@@ -407,8 +407,7 @@ static void route_free(snd_pcm_plugin_t
route_t *data = (route_t *)plugin->extra_data;
unsigned int dst_channel;
for (dst_channel = 0; dst_channel < plugin->dst_format.channels; ++dst_channel) {
- if (data->ttable[dst_channel].srcs != NULL)
- kfree(data->ttable[dst_channel].srcs);
+ kfree(data->ttable[dst_channel].srcs);
}
}

diff -urpN linux-2.6.10-rc2/sound/core/pcm.c linux-2.6.10-rc2.changed/sound/core/pcm.c
--- linux-2.6.10-rc2/sound/core/pcm.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/pcm.c 2004-11-27 16:51:54.000000000 +0100
@@ -830,8 +830,7 @@ void snd_pcm_release_substream(snd_pcm_s
runtime->private_free(runtime);
snd_free_pages((void*)runtime->status, PAGE_ALIGN(sizeof(snd_pcm_mmap_status_t)));
snd_free_pages((void*)runtime->control, PAGE_ALIGN(sizeof(snd_pcm_mmap_control_t)));
- if (runtime->hw_constraints.rules)
- kfree(runtime->hw_constraints.rules);
+ kfree(runtime->hw_constraints.rules);
kfree(runtime);
substream->runtime = NULL;
substream->pstr->substream_opened--;
diff -urpN linux-2.6.10-rc2/sound/core/pcm_native.c linux-2.6.10-rc2.changed/sound/core/pcm_native.c
--- linux-2.6.10-rc2/sound/core/pcm_native.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/core/pcm_native.c 2004-11-27 16:51:06.000000000 +0100
@@ -1445,7 +1445,7 @@ static int snd_pcm_drain(snd_pcm_substre

_end:
snd_pcm_stream_unlock_irq(substream);
- if (drec && drec != &drec_tmp)
+ if (drec != &drec_tmp)
kfree(drec);
_unlock:
snd_power_unlock(card);
diff -urpN linux-2.6.10-rc2/sound/core/seq/oss/seq_oss_readq.c linux-2.6.10-rc2.changed/sound/core/seq/oss/seq_oss_readq.c
--- linux-2.6.10-rc2/sound/core/seq/oss/seq_oss_readq.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/seq/oss/seq_oss_readq.c 2004-11-27 17:02:44.000000000 +0100
@@ -74,8 +74,7 @@ void
snd_seq_oss_readq_delete(seq_oss_readq_t *q)
{
if (q) {
- if (q->q)
- kfree(q->q);
+ kfree(q->q);
kfree(q);
}
}
diff -urpN linux-2.6.10-rc2/sound/core/seq/seq_instr.c linux-2.6.10-rc2.changed/sound/core/seq/seq_instr.c
--- linux-2.6.10-rc2/sound/core/seq/seq_instr.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/seq/seq_instr.c 2004-11-27 16:58:50.000000000 +0100
@@ -56,8 +56,6 @@ snd_seq_kcluster_t *snd_seq_cluster_new(

void snd_seq_cluster_free(snd_seq_kcluster_t *cluster, int atomic)
{
- if (cluster == NULL)
- return;
kfree(cluster);
}

diff -urpN linux-2.6.10-rc2/sound/core/seq/seq_memory.c linux-2.6.10-rc2.changed/sound/core/seq/seq_memory.c
--- linux-2.6.10-rc2/sound/core/seq/seq_memory.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/seq/seq_memory.c 2004-11-27 16:53:55.000000000 +0100
@@ -436,8 +436,7 @@ int snd_seq_pool_done(pool_t *pool)
pool->total_elements = 0;
spin_unlock_irqrestore(&pool->lock, flags);

- if (ptr)
- vfree(ptr);
+ vfree(ptr);

spin_lock_irqsave(&pool->lock, flags);
pool->closing = 0;
diff -urpN linux-2.6.10-rc2/sound/core/seq/seq_midi_emul.c linux-2.6.10-rc2.changed/sound/core/seq/seq_midi_emul.c
--- linux-2.6.10-rc2/sound/core/seq/seq_midi_emul.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/seq/seq_midi_emul.c 2004-11-27 16:53:24.000000000 +0100
@@ -713,8 +713,7 @@ void snd_midi_channel_free_set(snd_midi_
{
if (chset == NULL)
return;
- if (chset->channels != NULL)
- kfree(chset->channels);
+ kfree(chset->channels);
kfree(chset);
}

diff -urpN linux-2.6.10-rc2/sound/core/seq/seq_midi_event.c linux-2.6.10-rc2.changed/sound/core/seq/seq_midi_event.c
--- linux-2.6.10-rc2/sound/core/seq/seq_midi_event.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/seq/seq_midi_event.c 2004-11-27 16:58:00.000000000 +0100
@@ -138,8 +138,7 @@ int snd_midi_event_new(int bufsize, snd_
void snd_midi_event_free(snd_midi_event_t *dev)
{
if (dev != NULL) {
- if (dev->buf)
- kfree(dev->buf);
+ kfree(dev->buf);
kfree(dev);
}
}
@@ -202,8 +201,7 @@ int snd_midi_event_resize_buffer(snd_mid
dev->bufsize = bufsize;
reset_encode(dev);
spin_unlock_irqrestore(&dev->lock, flags);
- if (old_buf)
- kfree(old_buf);
+ kfree(old_buf);
return 0;
}

diff -urpN linux-2.6.10-rc2/sound/core/sgbuf.c linux-2.6.10-rc2.changed/sound/core/sgbuf.c
--- linux-2.6.10-rc2/sound/core/sgbuf.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/sgbuf.c 2004-11-27 16:49:52.000000000 +0100
@@ -51,10 +51,8 @@ int snd_free_sgbuf_pages(struct snd_dma_
vunmap(dmab->area);
dmab->area = NULL;

- if (sgbuf->table)
- kfree(sgbuf->table);
- if (sgbuf->page_table)
- kfree(sgbuf->page_table);
+ kfree(sgbuf->table);
+ kfree(sgbuf->page_table);
kfree(sgbuf);
dmab->private_data = NULL;

diff -urpN linux-2.6.10-rc2/sound/core/timer.c linux-2.6.10-rc2.changed/sound/core/timer.c
--- linux-2.6.10-rc2/sound/core/timer.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/core/timer.c 2004-11-27 16:45:06.000000000 +0100
@@ -351,8 +351,7 @@ int snd_timer_close(snd_timer_instance_t
}
if (timeri->private_free)
timeri->private_free(timeri);
- if (timeri->owner)
- kfree(timeri->owner);
+ kfree(timeri->owner);
kfree(timeri);
if (timer && timer->card)
module_put(timer->card->module);
@@ -1004,8 +1003,7 @@ static struct _snd_timer_hardware snd_ti

static void snd_timer_free_system(snd_timer_t *timer)
{
- if (timer->private_data)
- kfree(timer->private_data);
+ kfree(timer->private_data);
}

static int snd_timer_register_system(void)
@@ -1226,10 +1224,8 @@ static int snd_timer_user_release(struct
fasync_helper(-1, file, 0, &tu->fasync);
if (tu->timeri)
snd_timer_close(tu->timeri);
- if (tu->queue)
- kfree(tu->queue);
- if (tu->tqueue)
- kfree(tu->tqueue);
+ kfree(tu->queue);
+ kfree(tu->tqueue);
kfree(tu);
}
return 0;
diff -urpN linux-2.6.10-rc2/sound/i2c/cs8427.c linux-2.6.10-rc2.changed/sound/i2c/cs8427.c
--- linux-2.6.10-rc2/sound/i2c/cs8427.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/i2c/cs8427.c 2004-11-27 17:44:56.000000000 +0100
@@ -156,8 +156,7 @@ static int snd_cs8427_send_corudata(snd_

static void snd_cs8427_free(snd_i2c_device_t *device)
{
- if (device->private_data)
- kfree(device->private_data);
+ kfree(device->private_data);
}

int snd_cs8427_create(snd_i2c_bus_t *bus,
diff -urpN linux-2.6.10-rc2/sound/i2c/l3/uda1341.c linux-2.6.10-rc2.changed/sound/i2c/l3/uda1341.c
--- linux-2.6.10-rc2/sound/i2c/l3/uda1341.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/i2c/l3/uda1341.c 2004-11-27 17:54:26.000000000 +0100
@@ -730,8 +730,7 @@ static int uda1341_attach(struct l3_clie

static void uda1341_detach(struct l3_client *clnt)
{
- if (clnt->driver_data)
- kfree(clnt->driver_data);
+ kfree(clnt->driver_data);
}

static int
diff -urpN linux-2.6.10-rc2/sound/isa/gus/gus_mem.c linux-2.6.10-rc2.changed/sound/isa/gus/gus_mem.c
--- linux-2.6.10-rc2/sound/isa/gus/gus_mem.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/isa/gus/gus_mem.c 2004-11-27 17:41:58.000000000 +0100
@@ -100,8 +100,7 @@ int snd_gf1_mem_xfree(snd_gf1_mem_t * al
if (block->prev)
block->prev->next = block->next;
}
- if (block->name)
- kfree(block->name);
+ kfree(block->name);
kfree(block);
return 0;
}
diff -urpN linux-2.6.10-rc2/sound/isa/sb/emu8000_pcm.c linux-2.6.10-rc2.changed/sound/isa/sb/emu8000_pcm.c
--- linux-2.6.10-rc2/sound/isa/sb/emu8000_pcm.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/isa/sb/emu8000_pcm.c 2004-11-27 17:43:02.000000000 +0100
@@ -260,8 +260,7 @@ static int emu8k_pcm_open(snd_pcm_substr
static int emu8k_pcm_close(snd_pcm_substream_t *subs)
{
emu8k_pcm_t *rec = subs->runtime->private_data;
- if (rec)
- kfree(rec);
+ kfree(rec);
subs->runtime->private_data = NULL;
return 0;
}
diff -urpN linux-2.6.10-rc2/sound/isa/wavefront/wavefront_fx.c linux-2.6.10-rc2.changed/sound/isa/wavefront/wavefront_fx.c
--- linux-2.6.10-rc2/sound/isa/wavefront/wavefront_fx.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/isa/wavefront/wavefront_fx.c 2004-11-27 17:39:03.000000000 +0100
@@ -537,8 +537,7 @@ snd_wavefront_fx_ioctl (snd_hwdep_t *sde
r.data[1], /* addr */
r.data[2], /* cnt */
pd);
- if (page_data)
- kfree(page_data);
+ kfree(page_data);
break;

default:
diff -urpN linux-2.6.10-rc2/sound/pci/ac97/ac97_codec.c linux-2.6.10-rc2.changed/sound/pci/ac97/ac97_codec.c
--- linux-2.6.10-rc2/sound/pci/ac97/ac97_codec.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/pci/ac97/ac97_codec.c 2004-11-27 17:35:31.000000000 +0100
@@ -1055,8 +1055,7 @@ static int snd_ac97_bus_free(ac97_bus_t
{
if (bus) {
snd_ac97_bus_proc_done(bus);
- if (bus->pcms)
- kfree(bus->pcms);
+ kfree(bus->pcms);
if (bus->private_free)
bus->private_free(bus);
kfree(bus);
diff -urpN linux-2.6.10-rc2/sound/pci/ali5451/ali5451.c linux-2.6.10-rc2.changed/sound/pci/ali5451/ali5451.c
--- linux-2.6.10-rc2/sound/pci/ali5451/ali5451.c 2004-10-23 10:55:12.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/pci/ali5451/ali5451.c 2004-11-27 17:23:17.000000000 +0100
@@ -1987,8 +1987,7 @@ static int snd_ali_free(ali_t * codec)
if (codec->port)
pci_release_regions(codec->pci);
#ifdef CONFIG_PM
- if (codec->image)
- kfree(codec->image);
+ kfree(codec->image);
#endif
kfree(codec);
return 0;
diff -urpN linux-2.6.10-rc2/sound/pci/cs46xx/dsp_spos.c linux-2.6.10-rc2.changed/sound/pci/cs46xx/dsp_spos.c
--- linux-2.6.10-rc2/sound/pci/cs46xx/dsp_spos.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/pci/cs46xx/dsp_spos.c 2004-11-27 17:26:48.000000000 +0100
@@ -289,15 +289,9 @@ void cs46xx_dsp_spos_destroy (cs46xx_t
cs46xx_dsp_proc_free_scb_desc ( (ins->scbs + i) );
}

- if (ins->code.data)
- kfree(ins->code.data);
-
- if (ins->symbol_table.symbols)
- vfree(ins->symbol_table.symbols);
-
- if (ins->modules)
- kfree(ins->modules);
-
+ kfree(ins->code.data);
+ vfree(ins->symbol_table.symbols);
+ kfree(ins->modules);
kfree(ins);
up(&chip->spos_mutex);
}
diff -urpN linux-2.6.10-rc2/sound/pci/emu10k1/emu10k1_main.c linux-2.6.10-rc2.changed/sound/pci/emu10k1/emu10k1_main.c
--- linux-2.6.10-rc2/sound/pci/emu10k1/emu10k1_main.c 2004-09-13 19:45:32.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/pci/emu10k1/emu10k1_main.c 2004-11-27 17:29:58.000000000 +0100
@@ -553,10 +553,8 @@ static int snd_emu10k1_free(emu10k1_t *e
snd_dma_free_pages(&emu->silent_page);
if (emu->ptb_pages.area)
snd_dma_free_pages(&emu->ptb_pages);
- if (emu->page_ptr_table)
- vfree(emu->page_ptr_table);
- if (emu->page_addr_table)
- vfree(emu->page_addr_table);
+ vfree(emu->page_ptr_table);
+ vfree(emu->page_addr_table);
if (emu->irq >= 0)
free_irq(emu->irq, (void *)emu);
if (emu->port)
diff -urpN linux-2.6.10-rc2/sound/pci/emu10k1/emupcm.c linux-2.6.10-rc2.changed/sound/pci/emu10k1/emupcm.c
--- linux-2.6.10-rc2/sound/pci/emu10k1/emupcm.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/pci/emu10k1/emupcm.c 2004-11-27 17:31:03.000000000 +0100
@@ -777,8 +777,7 @@ static void snd_emu10k1_pcm_free_substre
{
emu10k1_pcm_t *epcm = runtime->private_data;

- if (epcm)
- kfree(epcm);
+ kfree(epcm);
}

static int snd_emu10k1_playback_open(snd_pcm_substream_t * substream)
diff -urpN linux-2.6.10-rc2/sound/pci/ice1712/ak4xxx.c linux-2.6.10-rc2.changed/sound/pci/ice1712/ak4xxx.c
--- linux-2.6.10-rc2/sound/pci/ice1712/ak4xxx.c 2004-09-13 19:45:33.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/pci/ice1712/ak4xxx.c 2004-11-27 17:21:57.000000000 +0100
@@ -151,8 +151,7 @@ void snd_ice1712_akm4xxx_free(ice1712_t
return;
for (akidx = 0; akidx < ice->akm_codecs; akidx++) {
akm4xxx_t *ak = &ice->akm[akidx];
- if (ak->private_value[0])
- kfree((void *)ak->private_value[0]);
+ kfree(ak->private_value[0]);
}
kfree(ice->akm);
}
diff -urpN linux-2.6.10-rc2/sound/pci/maestro3.c linux-2.6.10-rc2.changed/sound/pci/maestro3.c
--- linux-2.6.10-rc2/sound/pci/maestro3.c 2004-10-23 10:55:13.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/pci/maestro3.c 2004-11-27 17:23:41.000000000 +0100
@@ -2374,8 +2374,7 @@ static int snd_m3_free(m3_t *chip)
}

#ifdef CONFIG_PM
- if (chip->suspend_mem)
- vfree(chip->suspend_mem);
+ vfree(chip->suspend_mem);
#endif

if (chip->irq >= 0) {
diff -urpN linux-2.6.10-rc2/sound/pci/trident/trident_main.c linux-2.6.10-rc2.changed/sound/pci/trident/trident_main.c
--- linux-2.6.10-rc2/sound/pci/trident/trident_main.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/pci/trident/trident_main.c 2004-11-27 17:25:37.000000000 +0100
@@ -3675,8 +3675,7 @@ int snd_trident_free(trident_t *trident)
snd_util_memhdr_free(trident->tlb.memhdr);
if (trident->tlb.silent_page.area)
snd_dma_free_pages(&trident->tlb.silent_page);
- if (trident->tlb.shadow_entries)
- vfree(trident->tlb.shadow_entries);
+ vfree(trident->tlb.shadow_entries);
snd_dma_free_pages(&trident->tlb.buffer);
}
if (trident->irq >= 0)
diff -urpN linux-2.6.10-rc2/sound/pci/ymfpci/ymfpci_main.c linux-2.6.10-rc2.changed/sound/pci/ymfpci/ymfpci_main.c
--- linux-2.6.10-rc2/sound/pci/ymfpci/ymfpci_main.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/pci/ymfpci/ymfpci_main.c 2004-11-27 17:19:57.000000000 +0100
@@ -831,8 +831,7 @@ static void snd_ymfpci_pcm_free_substrea
{
ymfpci_pcm_t *ypcm = runtime->private_data;

- if (ypcm)
- kfree(ypcm);
+ kfree(ypcm);
}

static int snd_ymfpci_playback_open_1(snd_pcm_substream_t * substream)
@@ -2065,8 +2064,7 @@ static int snd_ymfpci_free(ymfpci_t *chi
#endif

#ifdef CONFIG_PM
- if (chip->saved_regs)
- vfree(chip->saved_regs);
+ vfree(chip->saved_regs);
#endif
if (chip->mpu_res) {
release_resource(chip->mpu_res);
diff -urpN linux-2.6.10-rc2/sound/ppc/pmac.c linux-2.6.10-rc2.changed/sound/ppc/pmac.c
--- linux-2.6.10-rc2/sound/ppc/pmac.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/ppc/pmac.c 2004-11-27 17:16:31.000000000 +0100
@@ -71,7 +71,7 @@ static int snd_pmac_dbdma_alloc(pmac_dbd

static void snd_pmac_dbdma_free(pmac_dbdma_t *rec)
{
- if (rec && rec->space)
+ if (rec)
kfree(rec->space);
}

diff -urpN linux-2.6.10-rc2/sound/synth/emux/emux.c linux-2.6.10-rc2.changed/sound/synth/emux/emux.c
--- linux-2.6.10-rc2/sound/synth/emux/emux.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/synth/emux/emux.c 2004-11-27 16:27:17.000000000 +0100
@@ -137,12 +137,8 @@ int snd_emux_free(snd_emux_t *emu)
if (emu->sflist)
snd_sf_free(emu->sflist);

- if (emu->voices)
- kfree(emu->voices);
-
- if (emu->name)
- kfree(emu->name);
-
+ kfree(emu->voices);
+ kfree(emu->name);
kfree(emu);
return 0;
}
diff -urpN linux-2.6.10-rc2/sound/synth/emux/emux_seq.c linux-2.6.10-rc2.changed/sound/synth/emux/emux_seq.c
--- linux-2.6.10-rc2/sound/synth/emux/emux_seq.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/synth/emux/emux_seq.c 2004-11-27 16:27:38.000000000 +0100
@@ -197,8 +197,7 @@ free_port(void *private_data)
#ifdef SNDRV_EMUX_USE_RAW_EFFECT
snd_emux_delete_effect(p);
#endif
- if (p->chset.channels)
- kfree(p->chset.channels);
+ kfree(p->chset.channels);
kfree(p);
}
}
diff -urpN linux-2.6.10-rc2/sound/usb/usbaudio.c linux-2.6.10-rc2.changed/sound/usb/usbaudio.c
--- linux-2.6.10-rc2/sound/usb/usbaudio.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/usb/usbaudio.c 2004-11-27 17:12:19.000000000 +0100
@@ -2063,8 +2063,7 @@ static void free_substream(snd_usb_subst
return; /* not initialized */
list_for_each_safe(p, n, &subs->fmt_list) {
struct audioformat *fp = list_entry(p, struct audioformat, list);
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
}
}
@@ -2550,8 +2549,7 @@ static int parse_audio_endpoints(snd_usb

/* ok, let's parse further... */
if (parse_audio_format(dev, fp, format, fmt, stream) < 0) {
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
continue;
}
@@ -2559,8 +2557,7 @@ static int parse_audio_endpoints(snd_usb
snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint 0x%x\n", dev->devnum, iface_no, i, fp->endpoint);
err = add_audio_endpoint(chip, stream, fp);
if (err < 0) {
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
return err;
}
@@ -2693,15 +2690,13 @@ static int create_fixed_stream_quirk(snd
err = add_audio_endpoint(chip, stream, fp);
if (err < 0) {
kfree(fp);
- if (rate_table)
- kfree(rate_table);
+ kfree(rate_table);
return err;
}
if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
fp->altset_idx >= iface->num_altsetting) {
kfree(fp);
- if (rate_table)
- kfree(rate_table);
+ kfree(rate_table);
return -EINVAL;
}
alts = &iface->altsetting[fp->altset_idx];
diff -urpN linux-2.6.10-rc2/sound/usb/usbmidi.c linux-2.6.10-rc2.changed/sound/usb/usbmidi.c
--- linux-2.6.10-rc2/sound/usb/usbmidi.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/usb/usbmidi.c 2004-11-27 17:12:50.000000000 +0100
@@ -504,8 +504,7 @@ static snd_rawmidi_ops_t snd_usbmidi_inp
static void snd_usbmidi_in_endpoint_delete(snd_usb_midi_in_endpoint_t* ep)
{
if (ep->urb) {
- if (ep->urb->transfer_buffer)
- kfree(ep->urb->transfer_buffer);
+ kfree(ep->urb->transfer_buffer);
usb_free_urb(ep->urb);
}
kfree(ep);
@@ -632,8 +631,7 @@ static void snd_usbmidi_out_endpoint_del
if (ep->tasklet.func)
tasklet_kill(&ep->tasklet);
if (ep->urb) {
- if (ep->urb->transfer_buffer)
- kfree(ep->urb->transfer_buffer);
+ kfree(ep->urb->transfer_buffer);
usb_free_urb(ep->urb);
}
kfree(ep);
diff -urpN linux-2.6.10-rc2/sound/usb/usbmixer.c linux-2.6.10-rc2.changed/sound/usb/usbmixer.c
--- linux-2.6.10-rc2/sound/usb/usbmixer.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-rc2.changed/sound/usb/usbmixer.c 2004-11-27 17:13:43.000000000 +0100
@@ -573,7 +573,7 @@ static struct usb_feature_control_info a
static void usb_mixer_elem_free(snd_kcontrol_t *kctl)
{
if (kctl->private_data) {
- kfree((void *)kctl->private_data);
+ kfree(kctl->private_data);
kctl->private_data = NULL;
}
}
diff -urpN linux-2.6.10-rc2/sound/usb/usx2y/usbusx2y.c linux-2.6.10-rc2.changed/sound/usb/usx2y/usbusx2y.c
--- linux-2.6.10-rc2/sound/usb/usx2y/usbusx2y.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-rc2.changed/sound/usb/usx2y/usbusx2y.c 2004-11-27 17:15:30.000000000 +0100
@@ -285,8 +285,7 @@ static void usX2Y_unlinkSeq(snd_usX2Y_As
S->urb[i] = NULL;
}
}
- if (S->buffer)
- kfree(S->buffer);
+ kfree(S->buffer);
}


@@ -389,8 +388,7 @@ static struct usb_driver snd_usX2Y_usb_d

static void snd_usX2Y_card_private_free(snd_card_t *card)
{
- if (usX2Y(card)->In04Buf)
- kfree(usX2Y(card)->In04Buf);
+ kfree(usX2Y(card)->In04Buf);
usb_free_urb(usX2Y(card)->In04urb);
if (usX2Y(card)->us428ctls_sharedmem)
snd_free_pages(usX2Y(card)->us428ctls_sharedmem, sizeof(*usX2Y(card)->us428ctls_sharedmem));

--
Marcel Sebek
jabber: [email protected] ICQ: 279852819
linux user number: 307850 GPG ID: 5F88735E
GPG FP: 0F01 BAB8 3148 94DB B95D 1FCA 8B63 CA06 5F88 735E


Attachments:
(No filename) (27.20 kB)
signature.asc (189.00 B)
Digital signature
Download all attachments

2004-11-27 19:31:39

by Pekka Enberg

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

Hi Marcel,

On Sat, 2004-11-27 at 18:13 +0100, Marcel Sebek wrote:
> I've cleaned up sound/ directory from "if (x) {k/v}free(x);" and similar
> constructions. I'm going to to this for most of the kernel if I found
> some time.

I have patches to clean up vfree() in the kernel which I am planning to
send to the maintainers.

On Sat, 2004-11-27 at 18:13 +0100, Marcel Sebek wrote:
> static int snd_emu10k1_playback_open(snd_pcm_substream_t * substream)
> diff -urpN linux-2.6.10-rc2/sound/pci/ice1712/ak4xxx.c linux-2.6.10-rc2.changed/sound/pci/ice1712/ak4xxx.c
> --- linux-2.6.10-rc2/sound/pci/ice1712/ak4xxx.c 2004-09-13 19:45:33.000000000 +0200
> +++ linux-2.6.10-rc2.changed/sound/pci/ice1712/ak4xxx.c 2004-11-27 17:21:57.000000000 +0100
> @@ -151,8 +151,7 @@ void snd_ice1712_akm4xxx_free(ice1712_t
> return;
> for (akidx = 0; akidx < ice->akm_codecs; akidx++) {
> akm4xxx_t *ak = &ice->akm[akidx];
> - if (ak->private_value[0])
> - kfree((void *)ak->private_value[0]);
> + kfree(ak->private_value[0]);

Did you compile this? The type of ak->private_value seems to be unsigned
long so you need that cast here.

Please compile the kernel with allmodconfig to make sure you did not
break anything and then send these to the ALSA maintainers.

Pekka

2004-11-27 20:46:46

by Marcel Sebek

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sat, Nov 27, 2004 at 09:30:43PM +0200, Pekka Enberg wrote:
> Hi Marcel,
>
> On Sat, 2004-11-27 at 18:13 +0100, Marcel Sebek wrote:
> > I've cleaned up sound/ directory from "if (x) {k/v}free(x);" and similar
> > constructions. I'm going to to this for most of the kernel if I found
> > some time.
>
> I have patches to clean up vfree() in the kernel which I am planning to
> send to the maintainers.
>
> On Sat, 2004-11-27 at 18:13 +0100, Marcel Sebek wrote:
> > static int snd_emu10k1_playback_open(snd_pcm_substream_t * substream)
> > diff -urpN linux-2.6.10-rc2/sound/pci/ice1712/ak4xxx.c linux-2.6.10-rc2.changed/sound/pci/ice1712/ak4xxx.c
> > --- linux-2.6.10-rc2/sound/pci/ice1712/ak4xxx.c 2004-09-13 19:45:33.000000000 +0200
> > +++ linux-2.6.10-rc2.changed/sound/pci/ice1712/ak4xxx.c 2004-11-27 17:21:57.000000000 +0100
> > @@ -151,8 +151,7 @@ void snd_ice1712_akm4xxx_free(ice1712_t
> > return;
> > for (akidx = 0; akidx < ice->akm_codecs; akidx++) {
> > akm4xxx_t *ak = &ice->akm[akidx];
> > - if (ak->private_value[0])
> > - kfree((void *)ak->private_value[0]);
> > + kfree(ak->private_value[0]);
>
> Did you compile this? The type of ak->private_value seems to be unsigned
> long so you need that cast here.
>
> Please compile the kernel with allmodconfig to make sure you did not
> break anything and then send these to the ALSA maintainers.
>
You are right. Next time I'll do it. Here's corrected compile-tested
version of the patch.

Signed-off-by: Marcel Sebek <[email protected]>


diff -urpN linux-2.6.10/sound/core/info.c linux-2.6.10-new/sound/core/info.c
--- linux-2.6.10/sound/core/info.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/info.c 2004-11-27 21:21:50.000000000 +0100
@@ -895,8 +895,7 @@ void snd_info_free_entry(snd_info_entry_
{
if (entry == NULL)
return;
- if (entry->name)
- kfree((char *)entry->name);
+ kfree(entry->name);
if (entry->private_free)
entry->private_free(entry);
kfree(entry);
diff -urpN linux-2.6.10/sound/core/init.c linux-2.6.10-new/sound/core/init.c
--- linux-2.6.10/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
+++ linux-2.6.10-new/sound/core/init.c 2004-11-27 21:21:50.000000000 +0100
@@ -665,9 +665,8 @@ int snd_card_file_remove(snd_card_t *car
spin_unlock(&card->files_lock);
if (card->files == NULL)
wake_up(&card->shutdown_sleep);
- if (mfile) {
- kfree(mfile);
- } else {
+ kfree(mfile);
+ if (!mfile) {
snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
return -ENOENT;
}
diff -urpN linux-2.6.10/sound/core/ioctl32/ioctl32.c linux-2.6.10-new/sound/core/ioctl32/ioctl32.c
--- linux-2.6.10/sound/core/ioctl32/ioctl32.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/ioctl32/ioctl32.c 2004-11-27 21:21:50.000000000 +0100
@@ -370,10 +370,8 @@ static inline int _snd_ioctl32_ctl_elem_
if (copy_to_user((void __user *)arg, data32, sizeof(*data32)))
err = -EFAULT;
__end:
- if (data32)
- kfree(data32);
- if (data)
- kfree(data);
+ kfree(data32);
+ kfree(data);
return err;
}

diff -urpN linux-2.6.10/sound/core/ioctl32/ioctl32.h linux-2.6.10-new/sound/core/ioctl32/ioctl32.h
--- linux-2.6.10/sound/core/ioctl32/ioctl32.h 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/ioctl32/ioctl32.h 2004-11-27 21:21:50.000000000 +0100
@@ -103,10 +103,8 @@ static inline int _snd_ioctl32_##type(un
err = -EFAULT;\
}\
__end:\
- if (data)\
- kfree(data);\
- if (data32)\
- kfree(data32);\
+ kfree(data);\
+ kfree(data32);\
return err;\
}

diff -urpN linux-2.6.10/sound/core/ioctl32/pcm32.c linux-2.6.10-new/sound/core/ioctl32/pcm32.c
--- linux-2.6.10/sound/core/ioctl32/pcm32.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/ioctl32/pcm32.c 2004-11-27 21:21:50.000000000 +0100
@@ -224,10 +224,8 @@ static inline int _snd_ioctl32_pcm_hw_pa
else
recalculate_boundary(file);
__end:
- if (data)
- kfree(data);
- if (data32)
- kfree(data32);
+ kfree(data);
+ kfree(data32);
return err;
}

@@ -432,10 +430,8 @@ static inline int _snd_ioctl32_pcm_hw_pa
else
recalculate_boundary(file);
__end:
- if (data)
- kfree(data);
- if (data32)
- kfree(data32);
+ kfree(data);
+ kfree(data32);
return err;
}

diff -urpN linux-2.6.10/sound/core/oss/mixer_oss.c linux-2.6.10-new/sound/core/oss/mixer_oss.c
--- linux-2.6.10/sound/core/oss/mixer_oss.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/oss/mixer_oss.c 2004-11-27 21:21:50.000000000 +0100
@@ -527,10 +527,8 @@ static void snd_mixer_oss_get_volume1_vo
*right = snd_mixer_oss_conv1(uctl->value.integer.value[1], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[1]);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static void snd_mixer_oss_get_volume1_sw(snd_mixer_oss_file_t *fmixer,
@@ -566,10 +564,8 @@ static void snd_mixer_oss_get_volume1_sw
*right = 0;
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static int snd_mixer_oss_get_volume1(snd_mixer_oss_file_t *fmixer,
@@ -628,10 +624,8 @@ static void snd_mixer_oss_put_volume1_vo
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static void snd_mixer_oss_put_volume1_sw(snd_mixer_oss_file_t *fmixer,
@@ -673,10 +667,8 @@ static void snd_mixer_oss_put_volume1_sw
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static int snd_mixer_oss_put_volume1(snd_mixer_oss_file_t *fmixer,
@@ -802,10 +794,8 @@ static int snd_mixer_oss_get_recsrc2(snd
err = 0;
__unlock:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
return err;
}

@@ -853,10 +843,8 @@ static int snd_mixer_oss_put_recsrc2(snd
err = 0;
__unlock:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
return err;
}

diff -urpN linux-2.6.10/sound/core/oss/pcm_oss.c linux-2.6.10-new/sound/core/oss/pcm_oss.c
--- linux-2.6.10/sound/core/oss/pcm_oss.c 2004-11-27 17:06:17.000000000 +0100
+++ linux-2.6.10-new/sound/core/oss/pcm_oss.c 2004-11-27 21:21:50.000000000 +0100
@@ -513,8 +513,7 @@ static int snd_pcm_oss_change_params(snd

runtime->oss.params = 0;
runtime->oss.prepare = 1;
- if (runtime->oss.buffer != NULL)
- vfree(runtime->oss.buffer);
+ vfree(runtime->oss.buffer);
runtime->oss.buffer = vmalloc(runtime->oss.period_bytes);
runtime->oss.buffer_used = 0;
if (runtime->dma_area)
@@ -524,12 +523,9 @@ static int snd_pcm_oss_change_params(snd

err = 0;
failure:
- if (sw_params)
- kfree(sw_params);
- if (params)
- kfree(params);
- if (sparams)
- kfree(sparams);
+ kfree(sw_params);
+ kfree(params);
+ kfree(sparams);
return err;
}

@@ -1671,8 +1667,7 @@ static void snd_pcm_oss_release_substrea
{
snd_pcm_runtime_t *runtime;
runtime = substream->runtime;
- if (runtime->oss.buffer)
- vfree(runtime->oss.buffer);
+ vfree(runtime->oss.buffer);
snd_pcm_oss_plugin_clear(substream);
substream->oss.file = NULL;
substream->oss.oss = 0;
diff -urpN linux-2.6.10/sound/core/oss/pcm_plugin.c linux-2.6.10-new/sound/core/oss/pcm_plugin.c
--- linux-2.6.10/sound/core/oss/pcm_plugin.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/oss/pcm_plugin.c 2004-11-27 21:21:50.000000000 +0100
@@ -86,8 +86,7 @@ static int snd_pcm_plugin_alloc(snd_pcm_
snd_assert((size % 8) == 0, return -ENXIO);
size /= 8;
if (plugin->buf_frames < frames) {
- if (plugin->buf)
- vfree(plugin->buf);
+ vfree(plugin->buf);
plugin->buf = vmalloc(size);
plugin->buf_frames = frames;
}
@@ -217,14 +216,10 @@ int snd_pcm_plugin_free(snd_pcm_plugin_t
return 0;
if (plugin->private_free)
plugin->private_free(plugin);
- if (plugin->buf_channels)
- kfree(plugin->buf_channels);
- if (plugin->buf)
- vfree(plugin->buf);
- if (plugin->src_vmask)
- kfree(plugin->src_vmask);
- if (plugin->dst_vmask)
- kfree(plugin->dst_vmask);
+ kfree(plugin->buf_channels);
+ vfree(plugin->buf);
+ kfree(plugin->src_vmask);
+ kfree(plugin->dst_vmask);
kfree(plugin);
return 0;
}
diff -urpN linux-2.6.10/sound/core/oss/route.c linux-2.6.10-new/sound/core/oss/route.c
--- linux-2.6.10/sound/core/oss/route.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/oss/route.c 2004-11-27 21:21:50.000000000 +0100
@@ -407,8 +407,7 @@ static void route_free(snd_pcm_plugin_t
route_t *data = (route_t *)plugin->extra_data;
unsigned int dst_channel;
for (dst_channel = 0; dst_channel < plugin->dst_format.channels; ++dst_channel) {
- if (data->ttable[dst_channel].srcs != NULL)
- kfree(data->ttable[dst_channel].srcs);
+ kfree(data->ttable[dst_channel].srcs);
}
}

diff -urpN linux-2.6.10/sound/core/pcm.c linux-2.6.10-new/sound/core/pcm.c
--- linux-2.6.10/sound/core/pcm.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/pcm.c 2004-11-27 21:21:50.000000000 +0100
@@ -830,8 +830,7 @@ void snd_pcm_release_substream(snd_pcm_s
runtime->private_free(runtime);
snd_free_pages((void*)runtime->status, PAGE_ALIGN(sizeof(snd_pcm_mmap_status_t)));
snd_free_pages((void*)runtime->control, PAGE_ALIGN(sizeof(snd_pcm_mmap_control_t)));
- if (runtime->hw_constraints.rules)
- kfree(runtime->hw_constraints.rules);
+ kfree(runtime->hw_constraints.rules);
kfree(runtime);
substream->runtime = NULL;
substream->pstr->substream_opened--;
diff -urpN linux-2.6.10/sound/core/pcm_native.c linux-2.6.10-new/sound/core/pcm_native.c
--- linux-2.6.10/sound/core/pcm_native.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/pcm_native.c 2004-11-27 21:21:50.000000000 +0100
@@ -1445,7 +1445,7 @@ static int snd_pcm_drain(snd_pcm_substre

_end:
snd_pcm_stream_unlock_irq(substream);
- if (drec && drec != &drec_tmp)
+ if (drec != &drec_tmp)
kfree(drec);
_unlock:
snd_power_unlock(card);
diff -urpN linux-2.6.10/sound/core/seq/oss/seq_oss_readq.c linux-2.6.10-new/sound/core/seq/oss/seq_oss_readq.c
--- linux-2.6.10/sound/core/seq/oss/seq_oss_readq.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/oss/seq_oss_readq.c 2004-11-27 21:21:50.000000000 +0100
@@ -74,8 +74,7 @@ void
snd_seq_oss_readq_delete(seq_oss_readq_t *q)
{
if (q) {
- if (q->q)
- kfree(q->q);
+ kfree(q->q);
kfree(q);
}
}
diff -urpN linux-2.6.10/sound/core/seq/seq_instr.c linux-2.6.10-new/sound/core/seq/seq_instr.c
--- linux-2.6.10/sound/core/seq/seq_instr.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_instr.c 2004-11-27 21:21:50.000000000 +0100
@@ -56,8 +56,6 @@ snd_seq_kcluster_t *snd_seq_cluster_new(

void snd_seq_cluster_free(snd_seq_kcluster_t *cluster, int atomic)
{
- if (cluster == NULL)
- return;
kfree(cluster);
}

diff -urpN linux-2.6.10/sound/core/seq/seq_memory.c linux-2.6.10-new/sound/core/seq/seq_memory.c
--- linux-2.6.10/sound/core/seq/seq_memory.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_memory.c 2004-11-27 21:21:50.000000000 +0100
@@ -436,8 +436,7 @@ int snd_seq_pool_done(pool_t *pool)
pool->total_elements = 0;
spin_unlock_irqrestore(&pool->lock, flags);

- if (ptr)
- vfree(ptr);
+ vfree(ptr);

spin_lock_irqsave(&pool->lock, flags);
pool->closing = 0;
diff -urpN linux-2.6.10/sound/core/seq/seq_midi_emul.c linux-2.6.10-new/sound/core/seq/seq_midi_emul.c
--- linux-2.6.10/sound/core/seq/seq_midi_emul.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_midi_emul.c 2004-11-27 21:21:50.000000000 +0100
@@ -713,8 +713,7 @@ void snd_midi_channel_free_set(snd_midi_
{
if (chset == NULL)
return;
- if (chset->channels != NULL)
- kfree(chset->channels);
+ kfree(chset->channels);
kfree(chset);
}

diff -urpN linux-2.6.10/sound/core/seq/seq_midi_event.c linux-2.6.10-new/sound/core/seq/seq_midi_event.c
--- linux-2.6.10/sound/core/seq/seq_midi_event.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_midi_event.c 2004-11-27 21:21:50.000000000 +0100
@@ -138,8 +138,7 @@ int snd_midi_event_new(int bufsize, snd_
void snd_midi_event_free(snd_midi_event_t *dev)
{
if (dev != NULL) {
- if (dev->buf)
- kfree(dev->buf);
+ kfree(dev->buf);
kfree(dev);
}
}
@@ -202,8 +201,7 @@ int snd_midi_event_resize_buffer(snd_mid
dev->bufsize = bufsize;
reset_encode(dev);
spin_unlock_irqrestore(&dev->lock, flags);
- if (old_buf)
- kfree(old_buf);
+ kfree(old_buf);
return 0;
}

diff -urpN linux-2.6.10/sound/core/sgbuf.c linux-2.6.10-new/sound/core/sgbuf.c
--- linux-2.6.10/sound/core/sgbuf.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/sgbuf.c 2004-11-27 21:21:50.000000000 +0100
@@ -51,10 +51,8 @@ int snd_free_sgbuf_pages(struct snd_dma_
vunmap(dmab->area);
dmab->area = NULL;

- if (sgbuf->table)
- kfree(sgbuf->table);
- if (sgbuf->page_table)
- kfree(sgbuf->page_table);
+ kfree(sgbuf->table);
+ kfree(sgbuf->page_table);
kfree(sgbuf);
dmab->private_data = NULL;

diff -urpN linux-2.6.10/sound/core/timer.c linux-2.6.10-new/sound/core/timer.c
--- linux-2.6.10/sound/core/timer.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/timer.c 2004-11-27 21:21:50.000000000 +0100
@@ -351,8 +351,7 @@ int snd_timer_close(snd_timer_instance_t
}
if (timeri->private_free)
timeri->private_free(timeri);
- if (timeri->owner)
- kfree(timeri->owner);
+ kfree(timeri->owner);
kfree(timeri);
if (timer && timer->card)
module_put(timer->card->module);
@@ -1004,8 +1003,7 @@ static struct _snd_timer_hardware snd_ti

static void snd_timer_free_system(snd_timer_t *timer)
{
- if (timer->private_data)
- kfree(timer->private_data);
+ kfree(timer->private_data);
}

static int snd_timer_register_system(void)
@@ -1226,10 +1224,8 @@ static int snd_timer_user_release(struct
fasync_helper(-1, file, 0, &tu->fasync);
if (tu->timeri)
snd_timer_close(tu->timeri);
- if (tu->queue)
- kfree(tu->queue);
- if (tu->tqueue)
- kfree(tu->tqueue);
+ kfree(tu->queue);
+ kfree(tu->tqueue);
kfree(tu);
}
return 0;
diff -urpN linux-2.6.10/sound/i2c/cs8427.c linux-2.6.10-new/sound/i2c/cs8427.c
--- linux-2.6.10/sound/i2c/cs8427.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/i2c/cs8427.c 2004-11-27 21:21:50.000000000 +0100
@@ -156,8 +156,7 @@ static int snd_cs8427_send_corudata(snd_

static void snd_cs8427_free(snd_i2c_device_t *device)
{
- if (device->private_data)
- kfree(device->private_data);
+ kfree(device->private_data);
}

int snd_cs8427_create(snd_i2c_bus_t *bus,
diff -urpN linux-2.6.10/sound/i2c/l3/uda1341.c linux-2.6.10-new/sound/i2c/l3/uda1341.c
--- linux-2.6.10/sound/i2c/l3/uda1341.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/i2c/l3/uda1341.c 2004-11-27 21:21:50.000000000 +0100
@@ -730,8 +730,7 @@ static int uda1341_attach(struct l3_clie

static void uda1341_detach(struct l3_client *clnt)
{
- if (clnt->driver_data)
- kfree(clnt->driver_data);
+ kfree(clnt->driver_data);
}

static int
diff -urpN linux-2.6.10/sound/isa/gus/gus_mem.c linux-2.6.10-new/sound/isa/gus/gus_mem.c
--- linux-2.6.10/sound/isa/gus/gus_mem.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/isa/gus/gus_mem.c 2004-11-27 21:21:50.000000000 +0100
@@ -100,8 +100,7 @@ int snd_gf1_mem_xfree(snd_gf1_mem_t * al
if (block->prev)
block->prev->next = block->next;
}
- if (block->name)
- kfree(block->name);
+ kfree(block->name);
kfree(block);
return 0;
}
diff -urpN linux-2.6.10/sound/isa/sb/emu8000_pcm.c linux-2.6.10-new/sound/isa/sb/emu8000_pcm.c
--- linux-2.6.10/sound/isa/sb/emu8000_pcm.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/isa/sb/emu8000_pcm.c 2004-11-27 21:21:50.000000000 +0100
@@ -260,8 +260,7 @@ static int emu8k_pcm_open(snd_pcm_substr
static int emu8k_pcm_close(snd_pcm_substream_t *subs)
{
emu8k_pcm_t *rec = subs->runtime->private_data;
- if (rec)
- kfree(rec);
+ kfree(rec);
subs->runtime->private_data = NULL;
return 0;
}
diff -urpN linux-2.6.10/sound/isa/wavefront/wavefront_fx.c linux-2.6.10-new/sound/isa/wavefront/wavefront_fx.c
--- linux-2.6.10/sound/isa/wavefront/wavefront_fx.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/isa/wavefront/wavefront_fx.c 2004-11-27 21:21:50.000000000 +0100
@@ -537,8 +537,7 @@ snd_wavefront_fx_ioctl (snd_hwdep_t *sde
r.data[1], /* addr */
r.data[2], /* cnt */
pd);
- if (page_data)
- kfree(page_data);
+ kfree(page_data);
break;

default:
diff -urpN linux-2.6.10/sound/pci/ac97/ac97_codec.c linux-2.6.10-new/sound/pci/ac97/ac97_codec.c
--- linux-2.6.10/sound/pci/ac97/ac97_codec.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/pci/ac97/ac97_codec.c 2004-11-27 21:21:50.000000000 +0100
@@ -1055,8 +1055,7 @@ static int snd_ac97_bus_free(ac97_bus_t
{
if (bus) {
snd_ac97_bus_proc_done(bus);
- if (bus->pcms)
- kfree(bus->pcms);
+ kfree(bus->pcms);
if (bus->private_free)
bus->private_free(bus);
kfree(bus);
diff -urpN linux-2.6.10/sound/pci/ali5451/ali5451.c linux-2.6.10-new/sound/pci/ali5451/ali5451.c
--- linux-2.6.10/sound/pci/ali5451/ali5451.c 2004-10-23 10:55:12.000000000 +0200
+++ linux-2.6.10-new/sound/pci/ali5451/ali5451.c 2004-11-27 21:21:50.000000000 +0100
@@ -1987,8 +1987,7 @@ static int snd_ali_free(ali_t * codec)
if (codec->port)
pci_release_regions(codec->pci);
#ifdef CONFIG_PM
- if (codec->image)
- kfree(codec->image);
+ kfree(codec->image);
#endif
kfree(codec);
return 0;
diff -urpN linux-2.6.10/sound/pci/cs46xx/dsp_spos.c linux-2.6.10-new/sound/pci/cs46xx/dsp_spos.c
--- linux-2.6.10/sound/pci/cs46xx/dsp_spos.c 2004-11-27 21:20:33.000000000 +0100
+++ linux-2.6.10-new/sound/pci/cs46xx/dsp_spos.c 2004-11-27 21:21:50.000000000 +0100
@@ -289,15 +289,9 @@ void cs46xx_dsp_spos_destroy (cs46xx_t
cs46xx_dsp_proc_free_scb_desc ( (ins->scbs + i) );
}

- if (ins->code.data)
- kfree(ins->code.data);
-
- if (ins->symbol_table.symbols)
- vfree(ins->symbol_table.symbols);
-
- if (ins->modules)
- kfree(ins->modules);
-
+ kfree(ins->code.data);
+ vfree(ins->symbol_table.symbols);
+ kfree(ins->modules);
kfree(ins);
up(&chip->spos_mutex);
}
diff -urpN linux-2.6.10/sound/pci/emu10k1/emu10k1_main.c linux-2.6.10-new/sound/pci/emu10k1/emu10k1_main.c
--- linux-2.6.10/sound/pci/emu10k1/emu10k1_main.c 2004-09-13 19:45:32.000000000 +0200
+++ linux-2.6.10-new/sound/pci/emu10k1/emu10k1_main.c 2004-11-27 21:21:50.000000000 +0100
@@ -553,10 +553,8 @@ static int snd_emu10k1_free(emu10k1_t *e
snd_dma_free_pages(&emu->silent_page);
if (emu->ptb_pages.area)
snd_dma_free_pages(&emu->ptb_pages);
- if (emu->page_ptr_table)
- vfree(emu->page_ptr_table);
- if (emu->page_addr_table)
- vfree(emu->page_addr_table);
+ vfree(emu->page_ptr_table);
+ vfree(emu->page_addr_table);
if (emu->irq >= 0)
free_irq(emu->irq, (void *)emu);
if (emu->port)
diff -urpN linux-2.6.10/sound/pci/emu10k1/emupcm.c linux-2.6.10-new/sound/pci/emu10k1/emupcm.c
--- linux-2.6.10/sound/pci/emu10k1/emupcm.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/pci/emu10k1/emupcm.c 2004-11-27 21:21:50.000000000 +0100
@@ -777,8 +777,7 @@ static void snd_emu10k1_pcm_free_substre
{
emu10k1_pcm_t *epcm = runtime->private_data;

- if (epcm)
- kfree(epcm);
+ kfree(epcm);
}

static int snd_emu10k1_playback_open(snd_pcm_substream_t * substream)
diff -urpN linux-2.6.10/sound/pci/ice1712/ak4xxx.c linux-2.6.10-new/sound/pci/ice1712/ak4xxx.c
--- linux-2.6.10/sound/pci/ice1712/ak4xxx.c 2004-09-13 19:45:33.000000000 +0200
+++ linux-2.6.10-new/sound/pci/ice1712/ak4xxx.c 2004-11-27 21:22:30.000000000 +0100
@@ -151,8 +151,7 @@ void snd_ice1712_akm4xxx_free(ice1712_t
return;
for (akidx = 0; akidx < ice->akm_codecs; akidx++) {
akm4xxx_t *ak = &ice->akm[akidx];
- if (ak->private_value[0])
- kfree((void *)ak->private_value[0]);
+ kfree((void*)ak->private_value[0]);
}
kfree(ice->akm);
}
diff -urpN linux-2.6.10/sound/pci/maestro3.c linux-2.6.10-new/sound/pci/maestro3.c
--- linux-2.6.10/sound/pci/maestro3.c 2004-10-23 10:55:13.000000000 +0200
+++ linux-2.6.10-new/sound/pci/maestro3.c 2004-11-27 21:21:50.000000000 +0100
@@ -2374,8 +2374,7 @@ static int snd_m3_free(m3_t *chip)
}

#ifdef CONFIG_PM
- if (chip->suspend_mem)
- vfree(chip->suspend_mem);
+ vfree(chip->suspend_mem);
#endif

if (chip->irq >= 0) {
diff -urpN linux-2.6.10/sound/pci/trident/trident_main.c linux-2.6.10-new/sound/pci/trident/trident_main.c
--- linux-2.6.10/sound/pci/trident/trident_main.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/pci/trident/trident_main.c 2004-11-27 21:21:50.000000000 +0100
@@ -3675,8 +3675,7 @@ int snd_trident_free(trident_t *trident)
snd_util_memhdr_free(trident->tlb.memhdr);
if (trident->tlb.silent_page.area)
snd_dma_free_pages(&trident->tlb.silent_page);
- if (trident->tlb.shadow_entries)
- vfree(trident->tlb.shadow_entries);
+ vfree(trident->tlb.shadow_entries);
snd_dma_free_pages(&trident->tlb.buffer);
}
if (trident->irq >= 0)
diff -urpN linux-2.6.10/sound/pci/ymfpci/ymfpci_main.c linux-2.6.10-new/sound/pci/ymfpci/ymfpci_main.c
--- linux-2.6.10/sound/pci/ymfpci/ymfpci_main.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/pci/ymfpci/ymfpci_main.c 2004-11-27 21:21:50.000000000 +0100
@@ -831,8 +831,7 @@ static void snd_ymfpci_pcm_free_substrea
{
ymfpci_pcm_t *ypcm = runtime->private_data;

- if (ypcm)
- kfree(ypcm);
+ kfree(ypcm);
}

static int snd_ymfpci_playback_open_1(snd_pcm_substream_t * substream)
@@ -2065,8 +2064,7 @@ static int snd_ymfpci_free(ymfpci_t *chi
#endif

#ifdef CONFIG_PM
- if (chip->saved_regs)
- vfree(chip->saved_regs);
+ vfree(chip->saved_regs);
#endif
if (chip->mpu_res) {
release_resource(chip->mpu_res);
diff -urpN linux-2.6.10/sound/ppc/pmac.c linux-2.6.10-new/sound/ppc/pmac.c
--- linux-2.6.10/sound/ppc/pmac.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/ppc/pmac.c 2004-11-27 21:21:50.000000000 +0100
@@ -71,7 +71,7 @@ static int snd_pmac_dbdma_alloc(pmac_dbd

static void snd_pmac_dbdma_free(pmac_dbdma_t *rec)
{
- if (rec && rec->space)
+ if (rec)
kfree(rec->space);
}

diff -urpN linux-2.6.10/sound/synth/emux/emux.c linux-2.6.10-new/sound/synth/emux/emux.c
--- linux-2.6.10/sound/synth/emux/emux.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/synth/emux/emux.c 2004-11-27 21:21:50.000000000 +0100
@@ -137,12 +137,8 @@ int snd_emux_free(snd_emux_t *emu)
if (emu->sflist)
snd_sf_free(emu->sflist);

- if (emu->voices)
- kfree(emu->voices);
-
- if (emu->name)
- kfree(emu->name);
-
+ kfree(emu->voices);
+ kfree(emu->name);
kfree(emu);
return 0;
}
diff -urpN linux-2.6.10/sound/synth/emux/emux_seq.c linux-2.6.10-new/sound/synth/emux/emux_seq.c
--- linux-2.6.10/sound/synth/emux/emux_seq.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/synth/emux/emux_seq.c 2004-11-27 21:21:50.000000000 +0100
@@ -197,8 +197,7 @@ free_port(void *private_data)
#ifdef SNDRV_EMUX_USE_RAW_EFFECT
snd_emux_delete_effect(p);
#endif
- if (p->chset.channels)
- kfree(p->chset.channels);
+ kfree(p->chset.channels);
kfree(p);
}
}
diff -urpN linux-2.6.10/sound/usb/usbaudio.c linux-2.6.10-new/sound/usb/usbaudio.c
--- linux-2.6.10/sound/usb/usbaudio.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/usb/usbaudio.c 2004-11-27 21:21:50.000000000 +0100
@@ -2063,8 +2063,7 @@ static void free_substream(snd_usb_subst
return; /* not initialized */
list_for_each_safe(p, n, &subs->fmt_list) {
struct audioformat *fp = list_entry(p, struct audioformat, list);
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
}
}
@@ -2550,8 +2549,7 @@ static int parse_audio_endpoints(snd_usb

/* ok, let's parse further... */
if (parse_audio_format(dev, fp, format, fmt, stream) < 0) {
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
continue;
}
@@ -2559,8 +2557,7 @@ static int parse_audio_endpoints(snd_usb
snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint 0x%x\n", dev->devnum, iface_no, i, fp->endpoint);
err = add_audio_endpoint(chip, stream, fp);
if (err < 0) {
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
return err;
}
@@ -2693,15 +2690,13 @@ static int create_fixed_stream_quirk(snd
err = add_audio_endpoint(chip, stream, fp);
if (err < 0) {
kfree(fp);
- if (rate_table)
- kfree(rate_table);
+ kfree(rate_table);
return err;
}
if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
fp->altset_idx >= iface->num_altsetting) {
kfree(fp);
- if (rate_table)
- kfree(rate_table);
+ kfree(rate_table);
return -EINVAL;
}
alts = &iface->altsetting[fp->altset_idx];
diff -urpN linux-2.6.10/sound/usb/usbmidi.c linux-2.6.10-new/sound/usb/usbmidi.c
--- linux-2.6.10/sound/usb/usbmidi.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/usb/usbmidi.c 2004-11-27 21:21:50.000000000 +0100
@@ -504,8 +504,7 @@ static snd_rawmidi_ops_t snd_usbmidi_inp
static void snd_usbmidi_in_endpoint_delete(snd_usb_midi_in_endpoint_t* ep)
{
if (ep->urb) {
- if (ep->urb->transfer_buffer)
- kfree(ep->urb->transfer_buffer);
+ kfree(ep->urb->transfer_buffer);
usb_free_urb(ep->urb);
}
kfree(ep);
@@ -632,8 +631,7 @@ static void snd_usbmidi_out_endpoint_del
if (ep->tasklet.func)
tasklet_kill(&ep->tasklet);
if (ep->urb) {
- if (ep->urb->transfer_buffer)
- kfree(ep->urb->transfer_buffer);
+ kfree(ep->urb->transfer_buffer);
usb_free_urb(ep->urb);
}
kfree(ep);
diff -urpN linux-2.6.10/sound/usb/usbmixer.c linux-2.6.10-new/sound/usb/usbmixer.c
--- linux-2.6.10/sound/usb/usbmixer.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/usb/usbmixer.c 2004-11-27 21:21:51.000000000 +0100
@@ -573,7 +573,7 @@ static struct usb_feature_control_info a
static void usb_mixer_elem_free(snd_kcontrol_t *kctl)
{
if (kctl->private_data) {
- kfree((void *)kctl->private_data);
+ kfree(kctl->private_data);
kctl->private_data = NULL;
}
}
diff -urpN linux-2.6.10/sound/usb/usx2y/usbusx2y.c linux-2.6.10-new/sound/usb/usx2y/usbusx2y.c
--- linux-2.6.10/sound/usb/usx2y/usbusx2y.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/usb/usx2y/usbusx2y.c 2004-11-27 21:21:51.000000000 +0100
@@ -285,8 +285,7 @@ static void usX2Y_unlinkSeq(snd_usX2Y_As
S->urb[i] = NULL;
}
}
- if (S->buffer)
- kfree(S->buffer);
+ kfree(S->buffer);
}


@@ -389,8 +388,7 @@ static struct usb_driver snd_usX2Y_usb_d

static void snd_usX2Y_card_private_free(snd_card_t *card)
{
- if (usX2Y(card)->In04Buf)
- kfree(usX2Y(card)->In04Buf);
+ kfree(usX2Y(card)->In04Buf);
usb_free_urb(usX2Y(card)->In04urb);
if (usX2Y(card)->us428ctls_sharedmem)
snd_free_pages(usX2Y(card)->us428ctls_sharedmem, sizeof(*usX2Y(card)->us428ctls_sharedmem));


--
Marcel Sebek
jabber: [email protected] ICQ: 279852819
linux user number: 307850 GPG ID: 5F88735E
GPG FP: 0F01 BAB8 3148 94DB B95D 1FCA 8B63 CA06 5F88 735E


Attachments:
(No filename) (27.26 kB)
signature.asc (189.00 B)
Digital signature
Download all attachments

2004-11-27 21:23:56

by Phil Oester

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sat, Nov 27, 2004 at 09:43:17PM +0100, Marcel Sebek wrote:
> diff -urpN linux-2.6.10/sound/core/init.c linux-2.6.10-new/sound/core/init.c
> --- linux-2.6.10/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
> +++ linux-2.6.10-new/sound/core/init.c 2004-11-27 21:21:50.000000000 +0100
> @@ -665,9 +665,8 @@ int snd_card_file_remove(snd_card_t *car
> spin_unlock(&card->files_lock);
> if (card->files == NULL)
> wake_up(&card->shutdown_sleep);
> - if (mfile) {
> - kfree(mfile);
> - } else {
> + kfree(mfile);
> + if (!mfile) {
> snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
> return -ENOENT;
> }

The above change seems to always trigger the ENOENT return, no?

Phil

2004-11-27 22:17:26

by George Spelvin

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

>> - if (mfile) {
>> - kfree(mfile);
>> - } else {
>> + kfree(mfile);
>> + if (!mfile) {
>> snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
>> return -ENOENT;
>> }

> The above change seems to always trigger the ENOENT return, no?

No. kfree(mfile) doesn't magically change the numerical value of mfile.
Dereferencing it now would be a bad idea, but you can still look at it.

(The ANSI C standard envisions architectures on which just *looking* at
a dangling pointer is illegal, but Linux makes slightly tighter
restrictions.)

2004-11-27 23:39:55

by John Levon

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sat, Nov 27, 2004 at 04:26:00PM +0200, Pekka Enberg wrote:

> This patch adds comments for kfree() and vfree() stating that both accept
> NULL pointers. I audited vfree() callers and there seems to be lots of
> confusion over this in the kernel.

Erm, are you sure about this? Somebody had to patch OProfile because
vfree() didn't like NULL value being passed in. When did this change?

john

2004-11-27 23:58:10

by Tomas Carnecky

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

Marcel Sebek wrote:
> On Sat, Nov 27, 2004 at 04:26:00PM +0200, Pekka Enberg wrote:
>
>>Hi,
>>
>>This patch adds comments for kfree() and vfree() stating that both accept
>>NULL pointers. I audited vfree() callers and there seems to be lots of
>>confusion over this in the kernel.
>>
> I've cleaned up sound/ directory from "if (x) {k/v}free(x);" and similar
> constructions. I'm going to to this for most of the kernel if I found
> some time.

Isn't 'if (x) { free(x); }' faster than the call to free() with a NULL
pointer?
What about a macro ?
#define fast_free(x) if (x) { free(x); }
Or even
#define kfree(x) if (x) { _kfree(x); }
Or maybe a inline function so it doesn't break existing code.
inline void kfree(x) { if (x) { _kfree(x); } }

tom

2004-11-28 00:17:33

by Nick Piggin

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

Tomas Carnecky wrote:
> Marcel Sebek wrote:
>
>> On Sat, Nov 27, 2004 at 04:26:00PM +0200, Pekka Enberg wrote:
>>
>>> Hi,
>>>
>>> This patch adds comments for kfree() and vfree() stating that both
>>> accept
>>> NULL pointers. I audited vfree() callers and there seems to be lots of
>>> confusion over this in the kernel.
>>>
>> I've cleaned up sound/ directory from "if (x) {k/v}free(x);" and similar
>> constructions. I'm going to to this for most of the kernel if I found
>> some time.
>
>
> Isn't 'if (x) { free(x); }' faster than the call to free() with a NULL
> pointer?
> What about a macro ?
> #define fast_free(x) if (x) { free(x); }
> Or even
> #define kfree(x) if (x) { _kfree(x); }
> Or maybe a inline function so it doesn't break existing code.
> inline void kfree(x) { if (x) { _kfree(x); } }
>

Well if a NULL parameter is the exceptional case, then you don't want to
litter the L1 cache with the extra code that will only save a function
call in rare cases.

And I think it should be the exceptional case, because it shouldn't really
be used for much other than streamline error handling or cleanup functions
to cope with failed allocations without adding checks everywhere. If you're
doing lots of kfree(NULL) as part of normal operation, then that may
suggest you aren't tracking your memory very well.

2004-11-28 08:01:30

by Pekka Enberg

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sat, Nov 27, 2004 at 04:26:00PM +0200, Pekka Enberg wrote:
> > This patch adds comments for kfree() and vfree() stating that both accept
> > NULL pointers. I audited vfree() callers and there seems to be lots of
> > confusion over this in the kernel.

On Sat, 2004-11-27 at 23:39 +0000, John Levon wrote:
> Erm, are you sure about this? Somebody had to patch OProfile because
> vfree() didn't like NULL value being passed in. When did this change?

Yes, I am sure. vfree() calls __vunmap() which returns immediately if
the passed pointer is NULL. I don't know when this changed.

Pekka

2004-11-28 08:06:52

by Pekka Enberg

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sat, Nov 27, 2004 at 09:43:17PM +0100, Marcel Sebek wrote:
> > diff -urpN linux-2.6.10/sound/core/init.c linux-2.6.10-new/sound/core/init.c
> > --- linux-2.6.10/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
> > +++ linux-2.6.10-new/sound/core/init.c 2004-11-27 21:21:50.000000000 +0100
> > @@ -665,9 +665,8 @@ int snd_card_file_remove(snd_card_t *car
> > spin_unlock(&card->files_lock);
> > if (card->files == NULL)
> > wake_up(&card->shutdown_sleep);
> > - if (mfile) {
> > - kfree(mfile);
> > - } else {
> > + kfree(mfile);
> > + if (!mfile) {
> > snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
> > return -ENOENT;
> > }

On Sat, 2004-11-27 at 13:23 -0800, Phil Oester wrote:
> The above change seems to always trigger the ENOENT return, no?

No it doesn't. kfree() does not set mfile to NULL. However, I think the
above would be more readable if we did the kfree() _after_ the NULL
check. Marcel, what do you think?

Pekka

2004-11-28 08:21:19

by Pekka Enberg

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

Tomas Carnecky wrote:
> > Isn't 'if (x) { free(x); }' faster than the call to free() with a NULL
> > pointer?
> > What about a macro ?
> > #define fast_free(x) if (x) { free(x); }
> > Or even
> > #define kfree(x) if (x) { _kfree(x); }
> > Or maybe a inline function so it doesn't break existing code.
> > inline void kfree(x) { if (x) { _kfree(x); } }

On Sun, 2004-11-28 at 11:17 +1100, Nick Piggin wrote:
> Well if a NULL parameter is the exceptional case, then you don't want to
> litter the L1 cache with the extra code that will only save a function
> call in rare cases.
>
> And I think it should be the exceptional case, because it shouldn't really
> be used for much other than streamline error handling or cleanup functions
> to cope with failed allocations without adding checks everywhere. If you're
> doing lots of kfree(NULL) as part of normal operation, then that may
> suggest you aren't tracking your memory very well.

Agreed. The drivers also use NULL for optional fields btw. Removing the
redundant checks reduce the size of source and object code so we get
more readable code and smaller memory footprint at the same time (yay!).
Furthermore, we get rid of the _confusion_ over the use of kfree() and
vfree().

Pekka

2004-11-28 09:06:40

by Marcel Sebek

[permalink] [raw]
Subject: Re: [PATCH] Document kfree and vfree NULL usage

On Sun, Nov 28, 2004 at 10:05:55AM +0200, Pekka Enberg wrote:
> On Sat, Nov 27, 2004 at 09:43:17PM +0100, Marcel Sebek wrote:
> > > diff -urpN linux-2.6.10/sound/core/init.c linux-2.6.10-new/sound/core/init.c
> > > --- linux-2.6.10/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
> > > +++ linux-2.6.10-new/sound/core/init.c 2004-11-27 21:21:50.000000000 +0100
> > > @@ -665,9 +665,8 @@ int snd_card_file_remove(snd_card_t *car
> > > spin_unlock(&card->files_lock);
> > > if (card->files == NULL)
> > > wake_up(&card->shutdown_sleep);
> > > - if (mfile) {
> > > - kfree(mfile);
> > > - } else {
> > > + kfree(mfile);
> > > + if (!mfile) {
> > > snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
> > > return -ENOENT;
> > > }
>
> On Sat, 2004-11-27 at 13:23 -0800, Phil Oester wrote:
> > The above change seems to always trigger the ENOENT return, no?
>
> No it doesn't. kfree() does not set mfile to NULL. However, I think the
> above would be more readable if we did the kfree() _after_ the NULL
> check. Marcel, what do you think?
>

I think yes. The change I did only added one extra kfree call for
(mfile == NULL) and didn't save the NULL check. So here's an updated
version of the patch (and hopefully the final version :).

Signed-off-by: Marcel Sebek <[email protected]>

diff -urpN linux-2.6.10/sound/core/info.c linux-2.6.10-new/sound/core/info.c
--- linux-2.6.10/sound/core/info.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/info.c 2004-11-28 09:44:37.000000000 +0100
@@ -895,8 +895,7 @@ void snd_info_free_entry(snd_info_entry_
{
if (entry == NULL)
return;
- if (entry->name)
- kfree((char *)entry->name);
+ kfree(entry->name);
if (entry->private_free)
entry->private_free(entry);
kfree(entry);
diff -urpN linux-2.6.10/sound/core/init.c linux-2.6.10-new/sound/core/init.c
--- linux-2.6.10/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
+++ linux-2.6.10-new/sound/core/init.c 2004-11-28 09:46:10.000000000 +0100
@@ -665,12 +665,11 @@ int snd_card_file_remove(snd_card_t *car
spin_unlock(&card->files_lock);
if (card->files == NULL)
wake_up(&card->shutdown_sleep);
- if (mfile) {
- kfree(mfile);
- } else {
+ if (!mfile)
snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
return -ENOENT;
}
+ kfree(mfile);
return 0;
}

diff -urpN linux-2.6.10/sound/core/ioctl32/ioctl32.c linux-2.6.10-new/sound/core/ioctl32/ioctl32.c
--- linux-2.6.10/sound/core/ioctl32/ioctl32.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/ioctl32/ioctl32.c 2004-11-28 09:44:37.000000000 +0100
@@ -370,10 +370,8 @@ static inline int _snd_ioctl32_ctl_elem_
if (copy_to_user((void __user *)arg, data32, sizeof(*data32)))
err = -EFAULT;
__end:
- if (data32)
- kfree(data32);
- if (data)
- kfree(data);
+ kfree(data32);
+ kfree(data);
return err;
}

diff -urpN linux-2.6.10/sound/core/ioctl32/ioctl32.h linux-2.6.10-new/sound/core/ioctl32/ioctl32.h
--- linux-2.6.10/sound/core/ioctl32/ioctl32.h 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/ioctl32/ioctl32.h 2004-11-28 09:44:37.000000000 +0100
@@ -103,10 +103,8 @@ static inline int _snd_ioctl32_##type(un
err = -EFAULT;\
}\
__end:\
- if (data)\
- kfree(data);\
- if (data32)\
- kfree(data32);\
+ kfree(data);\
+ kfree(data32);\
return err;\
}

diff -urpN linux-2.6.10/sound/core/ioctl32/pcm32.c linux-2.6.10-new/sound/core/ioctl32/pcm32.c
--- linux-2.6.10/sound/core/ioctl32/pcm32.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/ioctl32/pcm32.c 2004-11-28 09:44:37.000000000 +0100
@@ -224,10 +224,8 @@ static inline int _snd_ioctl32_pcm_hw_pa
else
recalculate_boundary(file);
__end:
- if (data)
- kfree(data);
- if (data32)
- kfree(data32);
+ kfree(data);
+ kfree(data32);
return err;
}

@@ -432,10 +430,8 @@ static inline int _snd_ioctl32_pcm_hw_pa
else
recalculate_boundary(file);
__end:
- if (data)
- kfree(data);
- if (data32)
- kfree(data32);
+ kfree(data);
+ kfree(data32);
return err;
}

diff -urpN linux-2.6.10/sound/core/oss/mixer_oss.c linux-2.6.10-new/sound/core/oss/mixer_oss.c
--- linux-2.6.10/sound/core/oss/mixer_oss.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/oss/mixer_oss.c 2004-11-28 09:44:37.000000000 +0100
@@ -527,10 +527,8 @@ static void snd_mixer_oss_get_volume1_vo
*right = snd_mixer_oss_conv1(uctl->value.integer.value[1], uinfo->value.integer.min, uinfo->value.integer.max, &pslot->volume[1]);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static void snd_mixer_oss_get_volume1_sw(snd_mixer_oss_file_t *fmixer,
@@ -566,10 +564,8 @@ static void snd_mixer_oss_get_volume1_sw
*right = 0;
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static int snd_mixer_oss_get_volume1(snd_mixer_oss_file_t *fmixer,
@@ -628,10 +624,8 @@ static void snd_mixer_oss_put_volume1_vo
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static void snd_mixer_oss_put_volume1_sw(snd_mixer_oss_file_t *fmixer,
@@ -673,10 +667,8 @@ static void snd_mixer_oss_put_volume1_sw
snd_ctl_notify(card, SNDRV_CTL_EVENT_MASK_VALUE, &kctl->id);
__unalloc:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
}

static int snd_mixer_oss_put_volume1(snd_mixer_oss_file_t *fmixer,
@@ -802,10 +794,8 @@ static int snd_mixer_oss_get_recsrc2(snd
err = 0;
__unlock:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
return err;
}

@@ -853,10 +843,8 @@ static int snd_mixer_oss_put_recsrc2(snd
err = 0;
__unlock:
up_read(&card->controls_rwsem);
- if (uctl)
- kfree(uctl);
- if (uinfo)
- kfree(uinfo);
+ kfree(uctl);
+ kfree(uinfo);
return err;
}

diff -urpN linux-2.6.10/sound/core/oss/pcm_oss.c linux-2.6.10-new/sound/core/oss/pcm_oss.c
--- linux-2.6.10/sound/core/oss/pcm_oss.c 2004-11-27 17:06:17.000000000 +0100
+++ linux-2.6.10-new/sound/core/oss/pcm_oss.c 2004-11-28 09:44:37.000000000 +0100
@@ -513,8 +513,7 @@ static int snd_pcm_oss_change_params(snd

runtime->oss.params = 0;
runtime->oss.prepare = 1;
- if (runtime->oss.buffer != NULL)
- vfree(runtime->oss.buffer);
+ vfree(runtime->oss.buffer);
runtime->oss.buffer = vmalloc(runtime->oss.period_bytes);
runtime->oss.buffer_used = 0;
if (runtime->dma_area)
@@ -524,12 +523,9 @@ static int snd_pcm_oss_change_params(snd

err = 0;
failure:
- if (sw_params)
- kfree(sw_params);
- if (params)
- kfree(params);
- if (sparams)
- kfree(sparams);
+ kfree(sw_params);
+ kfree(params);
+ kfree(sparams);
return err;
}

@@ -1671,8 +1667,7 @@ static void snd_pcm_oss_release_substrea
{
snd_pcm_runtime_t *runtime;
runtime = substream->runtime;
- if (runtime->oss.buffer)
- vfree(runtime->oss.buffer);
+ vfree(runtime->oss.buffer);
snd_pcm_oss_plugin_clear(substream);
substream->oss.file = NULL;
substream->oss.oss = 0;
diff -urpN linux-2.6.10/sound/core/oss/pcm_plugin.c linux-2.6.10-new/sound/core/oss/pcm_plugin.c
--- linux-2.6.10/sound/core/oss/pcm_plugin.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/oss/pcm_plugin.c 2004-11-28 09:44:37.000000000 +0100
@@ -86,8 +86,7 @@ static int snd_pcm_plugin_alloc(snd_pcm_
snd_assert((size % 8) == 0, return -ENXIO);
size /= 8;
if (plugin->buf_frames < frames) {
- if (plugin->buf)
- vfree(plugin->buf);
+ vfree(plugin->buf);
plugin->buf = vmalloc(size);
plugin->buf_frames = frames;
}
@@ -217,14 +216,10 @@ int snd_pcm_plugin_free(snd_pcm_plugin_t
return 0;
if (plugin->private_free)
plugin->private_free(plugin);
- if (plugin->buf_channels)
- kfree(plugin->buf_channels);
- if (plugin->buf)
- vfree(plugin->buf);
- if (plugin->src_vmask)
- kfree(plugin->src_vmask);
- if (plugin->dst_vmask)
- kfree(plugin->dst_vmask);
+ kfree(plugin->buf_channels);
+ vfree(plugin->buf);
+ kfree(plugin->src_vmask);
+ kfree(plugin->dst_vmask);
kfree(plugin);
return 0;
}
diff -urpN linux-2.6.10/sound/core/oss/route.c linux-2.6.10-new/sound/core/oss/route.c
--- linux-2.6.10/sound/core/oss/route.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/oss/route.c 2004-11-28 09:44:37.000000000 +0100
@@ -407,8 +407,7 @@ static void route_free(snd_pcm_plugin_t
route_t *data = (route_t *)plugin->extra_data;
unsigned int dst_channel;
for (dst_channel = 0; dst_channel < plugin->dst_format.channels; ++dst_channel) {
- if (data->ttable[dst_channel].srcs != NULL)
- kfree(data->ttable[dst_channel].srcs);
+ kfree(data->ttable[dst_channel].srcs);
}
}

diff -urpN linux-2.6.10/sound/core/pcm.c linux-2.6.10-new/sound/core/pcm.c
--- linux-2.6.10/sound/core/pcm.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/pcm.c 2004-11-28 09:44:37.000000000 +0100
@@ -830,8 +830,7 @@ void snd_pcm_release_substream(snd_pcm_s
runtime->private_free(runtime);
snd_free_pages((void*)runtime->status, PAGE_ALIGN(sizeof(snd_pcm_mmap_status_t)));
snd_free_pages((void*)runtime->control, PAGE_ALIGN(sizeof(snd_pcm_mmap_control_t)));
- if (runtime->hw_constraints.rules)
- kfree(runtime->hw_constraints.rules);
+ kfree(runtime->hw_constraints.rules);
kfree(runtime);
substream->runtime = NULL;
substream->pstr->substream_opened--;
diff -urpN linux-2.6.10/sound/core/pcm_native.c linux-2.6.10-new/sound/core/pcm_native.c
--- linux-2.6.10/sound/core/pcm_native.c 2004-11-15 15:55:09.000000000 +0100
+++ linux-2.6.10-new/sound/core/pcm_native.c 2004-11-28 09:44:37.000000000 +0100
@@ -1445,7 +1445,7 @@ static int snd_pcm_drain(snd_pcm_substre

_end:
snd_pcm_stream_unlock_irq(substream);
- if (drec && drec != &drec_tmp)
+ if (drec != &drec_tmp)
kfree(drec);
_unlock:
snd_power_unlock(card);
diff -urpN linux-2.6.10/sound/core/seq/oss/seq_oss_readq.c linux-2.6.10-new/sound/core/seq/oss/seq_oss_readq.c
--- linux-2.6.10/sound/core/seq/oss/seq_oss_readq.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/oss/seq_oss_readq.c 2004-11-28 09:44:37.000000000 +0100
@@ -74,8 +74,7 @@ void
snd_seq_oss_readq_delete(seq_oss_readq_t *q)
{
if (q) {
- if (q->q)
- kfree(q->q);
+ kfree(q->q);
kfree(q);
}
}
diff -urpN linux-2.6.10/sound/core/seq/seq_instr.c linux-2.6.10-new/sound/core/seq/seq_instr.c
--- linux-2.6.10/sound/core/seq/seq_instr.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_instr.c 2004-11-28 09:44:37.000000000 +0100
@@ -56,8 +56,6 @@ snd_seq_kcluster_t *snd_seq_cluster_new(

void snd_seq_cluster_free(snd_seq_kcluster_t *cluster, int atomic)
{
- if (cluster == NULL)
- return;
kfree(cluster);
}

diff -urpN linux-2.6.10/sound/core/seq/seq_memory.c linux-2.6.10-new/sound/core/seq/seq_memory.c
--- linux-2.6.10/sound/core/seq/seq_memory.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_memory.c 2004-11-28 09:44:37.000000000 +0100
@@ -436,8 +436,7 @@ int snd_seq_pool_done(pool_t *pool)
pool->total_elements = 0;
spin_unlock_irqrestore(&pool->lock, flags);

- if (ptr)
- vfree(ptr);
+ vfree(ptr);

spin_lock_irqsave(&pool->lock, flags);
pool->closing = 0;
diff -urpN linux-2.6.10/sound/core/seq/seq_midi_emul.c linux-2.6.10-new/sound/core/seq/seq_midi_emul.c
--- linux-2.6.10/sound/core/seq/seq_midi_emul.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_midi_emul.c 2004-11-28 09:44:37.000000000 +0100
@@ -713,8 +713,7 @@ void snd_midi_channel_free_set(snd_midi_
{
if (chset == NULL)
return;
- if (chset->channels != NULL)
- kfree(chset->channels);
+ kfree(chset->channels);
kfree(chset);
}

diff -urpN linux-2.6.10/sound/core/seq/seq_midi_event.c linux-2.6.10-new/sound/core/seq/seq_midi_event.c
--- linux-2.6.10/sound/core/seq/seq_midi_event.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/seq/seq_midi_event.c 2004-11-28 09:44:37.000000000 +0100
@@ -138,8 +138,7 @@ int snd_midi_event_new(int bufsize, snd_
void snd_midi_event_free(snd_midi_event_t *dev)
{
if (dev != NULL) {
- if (dev->buf)
- kfree(dev->buf);
+ kfree(dev->buf);
kfree(dev);
}
}
@@ -202,8 +201,7 @@ int snd_midi_event_resize_buffer(snd_mid
dev->bufsize = bufsize;
reset_encode(dev);
spin_unlock_irqrestore(&dev->lock, flags);
- if (old_buf)
- kfree(old_buf);
+ kfree(old_buf);
return 0;
}

diff -urpN linux-2.6.10/sound/core/sgbuf.c linux-2.6.10-new/sound/core/sgbuf.c
--- linux-2.6.10/sound/core/sgbuf.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/sgbuf.c 2004-11-28 09:44:37.000000000 +0100
@@ -51,10 +51,8 @@ int snd_free_sgbuf_pages(struct snd_dma_
vunmap(dmab->area);
dmab->area = NULL;

- if (sgbuf->table)
- kfree(sgbuf->table);
- if (sgbuf->page_table)
- kfree(sgbuf->page_table);
+ kfree(sgbuf->table);
+ kfree(sgbuf->page_table);
kfree(sgbuf);
dmab->private_data = NULL;

diff -urpN linux-2.6.10/sound/core/timer.c linux-2.6.10-new/sound/core/timer.c
--- linux-2.6.10/sound/core/timer.c 2004-09-13 19:45:29.000000000 +0200
+++ linux-2.6.10-new/sound/core/timer.c 2004-11-28 09:44:37.000000000 +0100
@@ -351,8 +351,7 @@ int snd_timer_close(snd_timer_instance_t
}
if (timeri->private_free)
timeri->private_free(timeri);
- if (timeri->owner)
- kfree(timeri->owner);
+ kfree(timeri->owner);
kfree(timeri);
if (timer && timer->card)
module_put(timer->card->module);
@@ -1004,8 +1003,7 @@ static struct _snd_timer_hardware snd_ti

static void snd_timer_free_system(snd_timer_t *timer)
{
- if (timer->private_data)
- kfree(timer->private_data);
+ kfree(timer->private_data);
}

static int snd_timer_register_system(void)
@@ -1226,10 +1224,8 @@ static int snd_timer_user_release(struct
fasync_helper(-1, file, 0, &tu->fasync);
if (tu->timeri)
snd_timer_close(tu->timeri);
- if (tu->queue)
- kfree(tu->queue);
- if (tu->tqueue)
- kfree(tu->tqueue);
+ kfree(tu->queue);
+ kfree(tu->tqueue);
kfree(tu);
}
return 0;
diff -urpN linux-2.6.10/sound/i2c/cs8427.c linux-2.6.10-new/sound/i2c/cs8427.c
--- linux-2.6.10/sound/i2c/cs8427.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/i2c/cs8427.c 2004-11-28 09:44:37.000000000 +0100
@@ -156,8 +156,7 @@ static int snd_cs8427_send_corudata(snd_

static void snd_cs8427_free(snd_i2c_device_t *device)
{
- if (device->private_data)
- kfree(device->private_data);
+ kfree(device->private_data);
}

int snd_cs8427_create(snd_i2c_bus_t *bus,
diff -urpN linux-2.6.10/sound/i2c/l3/uda1341.c linux-2.6.10-new/sound/i2c/l3/uda1341.c
--- linux-2.6.10/sound/i2c/l3/uda1341.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/i2c/l3/uda1341.c 2004-11-28 09:44:37.000000000 +0100
@@ -730,8 +730,7 @@ static int uda1341_attach(struct l3_clie

static void uda1341_detach(struct l3_client *clnt)
{
- if (clnt->driver_data)
- kfree(clnt->driver_data);
+ kfree(clnt->driver_data);
}

static int
diff -urpN linux-2.6.10/sound/isa/gus/gus_mem.c linux-2.6.10-new/sound/isa/gus/gus_mem.c
--- linux-2.6.10/sound/isa/gus/gus_mem.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/isa/gus/gus_mem.c 2004-11-28 09:44:37.000000000 +0100
@@ -100,8 +100,7 @@ int snd_gf1_mem_xfree(snd_gf1_mem_t * al
if (block->prev)
block->prev->next = block->next;
}
- if (block->name)
- kfree(block->name);
+ kfree(block->name);
kfree(block);
return 0;
}
diff -urpN linux-2.6.10/sound/isa/sb/emu8000_pcm.c linux-2.6.10-new/sound/isa/sb/emu8000_pcm.c
--- linux-2.6.10/sound/isa/sb/emu8000_pcm.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/isa/sb/emu8000_pcm.c 2004-11-28 09:44:37.000000000 +0100
@@ -260,8 +260,7 @@ static int emu8k_pcm_open(snd_pcm_substr
static int emu8k_pcm_close(snd_pcm_substream_t *subs)
{
emu8k_pcm_t *rec = subs->runtime->private_data;
- if (rec)
- kfree(rec);
+ kfree(rec);
subs->runtime->private_data = NULL;
return 0;
}
diff -urpN linux-2.6.10/sound/isa/wavefront/wavefront_fx.c linux-2.6.10-new/sound/isa/wavefront/wavefront_fx.c
--- linux-2.6.10/sound/isa/wavefront/wavefront_fx.c 2004-09-13 19:45:30.000000000 +0200
+++ linux-2.6.10-new/sound/isa/wavefront/wavefront_fx.c 2004-11-28 09:44:37.000000000 +0100
@@ -537,8 +537,7 @@ snd_wavefront_fx_ioctl (snd_hwdep_t *sde
r.data[1], /* addr */
r.data[2], /* cnt */
pd);
- if (page_data)
- kfree(page_data);
+ kfree(page_data);
break;

default:
diff -urpN linux-2.6.10/sound/pci/ac97/ac97_codec.c linux-2.6.10-new/sound/pci/ac97/ac97_codec.c
--- linux-2.6.10/sound/pci/ac97/ac97_codec.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/pci/ac97/ac97_codec.c 2004-11-28 09:44:37.000000000 +0100
@@ -1055,8 +1055,7 @@ static int snd_ac97_bus_free(ac97_bus_t
{
if (bus) {
snd_ac97_bus_proc_done(bus);
- if (bus->pcms)
- kfree(bus->pcms);
+ kfree(bus->pcms);
if (bus->private_free)
bus->private_free(bus);
kfree(bus);
diff -urpN linux-2.6.10/sound/pci/ali5451/ali5451.c linux-2.6.10-new/sound/pci/ali5451/ali5451.c
--- linux-2.6.10/sound/pci/ali5451/ali5451.c 2004-10-23 10:55:12.000000000 +0200
+++ linux-2.6.10-new/sound/pci/ali5451/ali5451.c 2004-11-28 09:44:37.000000000 +0100
@@ -1987,8 +1987,7 @@ static int snd_ali_free(ali_t * codec)
if (codec->port)
pci_release_regions(codec->pci);
#ifdef CONFIG_PM
- if (codec->image)
- kfree(codec->image);
+ kfree(codec->image);
#endif
kfree(codec);
return 0;
diff -urpN linux-2.6.10/sound/pci/cs46xx/dsp_spos.c linux-2.6.10-new/sound/pci/cs46xx/dsp_spos.c
--- linux-2.6.10/sound/pci/cs46xx/dsp_spos.c 2004-11-27 21:20:33.000000000 +0100
+++ linux-2.6.10-new/sound/pci/cs46xx/dsp_spos.c 2004-11-28 09:44:37.000000000 +0100
@@ -289,15 +289,9 @@ void cs46xx_dsp_spos_destroy (cs46xx_t
cs46xx_dsp_proc_free_scb_desc ( (ins->scbs + i) );
}

- if (ins->code.data)
- kfree(ins->code.data);
-
- if (ins->symbol_table.symbols)
- vfree(ins->symbol_table.symbols);
-
- if (ins->modules)
- kfree(ins->modules);
-
+ kfree(ins->code.data);
+ vfree(ins->symbol_table.symbols);
+ kfree(ins->modules);
kfree(ins);
up(&chip->spos_mutex);
}
diff -urpN linux-2.6.10/sound/pci/emu10k1/emu10k1_main.c linux-2.6.10-new/sound/pci/emu10k1/emu10k1_main.c
--- linux-2.6.10/sound/pci/emu10k1/emu10k1_main.c 2004-09-13 19:45:32.000000000 +0200
+++ linux-2.6.10-new/sound/pci/emu10k1/emu10k1_main.c 2004-11-28 09:44:37.000000000 +0100
@@ -553,10 +553,8 @@ static int snd_emu10k1_free(emu10k1_t *e
snd_dma_free_pages(&emu->silent_page);
if (emu->ptb_pages.area)
snd_dma_free_pages(&emu->ptb_pages);
- if (emu->page_ptr_table)
- vfree(emu->page_ptr_table);
- if (emu->page_addr_table)
- vfree(emu->page_addr_table);
+ vfree(emu->page_ptr_table);
+ vfree(emu->page_addr_table);
if (emu->irq >= 0)
free_irq(emu->irq, (void *)emu);
if (emu->port)
diff -urpN linux-2.6.10/sound/pci/emu10k1/emupcm.c linux-2.6.10-new/sound/pci/emu10k1/emupcm.c
--- linux-2.6.10/sound/pci/emu10k1/emupcm.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/pci/emu10k1/emupcm.c 2004-11-28 09:44:37.000000000 +0100
@@ -777,8 +777,7 @@ static void snd_emu10k1_pcm_free_substre
{
emu10k1_pcm_t *epcm = runtime->private_data;

- if (epcm)
- kfree(epcm);
+ kfree(epcm);
}

static int snd_emu10k1_playback_open(snd_pcm_substream_t * substream)
diff -urpN linux-2.6.10/sound/pci/ice1712/ak4xxx.c linux-2.6.10-new/sound/pci/ice1712/ak4xxx.c
--- linux-2.6.10/sound/pci/ice1712/ak4xxx.c 2004-09-13 19:45:33.000000000 +0200
+++ linux-2.6.10-new/sound/pci/ice1712/ak4xxx.c 2004-11-28 09:44:37.000000000 +0100
@@ -151,8 +151,7 @@ void snd_ice1712_akm4xxx_free(ice1712_t
return;
for (akidx = 0; akidx < ice->akm_codecs; akidx++) {
akm4xxx_t *ak = &ice->akm[akidx];
- if (ak->private_value[0])
- kfree((void *)ak->private_value[0]);
+ kfree((void*)ak->private_value[0]);
}
kfree(ice->akm);
}
diff -urpN linux-2.6.10/sound/pci/maestro3.c linux-2.6.10-new/sound/pci/maestro3.c
--- linux-2.6.10/sound/pci/maestro3.c 2004-10-23 10:55:13.000000000 +0200
+++ linux-2.6.10-new/sound/pci/maestro3.c 2004-11-28 09:44:37.000000000 +0100
@@ -2374,8 +2374,7 @@ static int snd_m3_free(m3_t *chip)
}

#ifdef CONFIG_PM
- if (chip->suspend_mem)
- vfree(chip->suspend_mem);
+ vfree(chip->suspend_mem);
#endif

if (chip->irq >= 0) {
diff -urpN linux-2.6.10/sound/pci/trident/trident_main.c linux-2.6.10-new/sound/pci/trident/trident_main.c
--- linux-2.6.10/sound/pci/trident/trident_main.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/pci/trident/trident_main.c 2004-11-28 09:44:37.000000000 +0100
@@ -3675,8 +3675,7 @@ int snd_trident_free(trident_t *trident)
snd_util_memhdr_free(trident->tlb.memhdr);
if (trident->tlb.silent_page.area)
snd_dma_free_pages(&trident->tlb.silent_page);
- if (trident->tlb.shadow_entries)
- vfree(trident->tlb.shadow_entries);
+ vfree(trident->tlb.shadow_entries);
snd_dma_free_pages(&trident->tlb.buffer);
}
if (trident->irq >= 0)
diff -urpN linux-2.6.10/sound/pci/ymfpci/ymfpci_main.c linux-2.6.10-new/sound/pci/ymfpci/ymfpci_main.c
--- linux-2.6.10/sound/pci/ymfpci/ymfpci_main.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/pci/ymfpci/ymfpci_main.c 2004-11-28 09:44:37.000000000 +0100
@@ -831,8 +831,7 @@ static void snd_ymfpci_pcm_free_substrea
{
ymfpci_pcm_t *ypcm = runtime->private_data;

- if (ypcm)
- kfree(ypcm);
+ kfree(ypcm);
}

static int snd_ymfpci_playback_open_1(snd_pcm_substream_t * substream)
@@ -2065,8 +2064,7 @@ static int snd_ymfpci_free(ymfpci_t *chi
#endif

#ifdef CONFIG_PM
- if (chip->saved_regs)
- vfree(chip->saved_regs);
+ vfree(chip->saved_regs);
#endif
if (chip->mpu_res) {
release_resource(chip->mpu_res);
diff -urpN linux-2.6.10/sound/ppc/pmac.c linux-2.6.10-new/sound/ppc/pmac.c
--- linux-2.6.10/sound/ppc/pmac.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/ppc/pmac.c 2004-11-28 09:44:37.000000000 +0100
@@ -71,7 +71,7 @@ static int snd_pmac_dbdma_alloc(pmac_dbd

static void snd_pmac_dbdma_free(pmac_dbdma_t *rec)
{
- if (rec && rec->space)
+ if (rec)
kfree(rec->space);
}

diff -urpN linux-2.6.10/sound/synth/emux/emux.c linux-2.6.10-new/sound/synth/emux/emux.c
--- linux-2.6.10/sound/synth/emux/emux.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/synth/emux/emux.c 2004-11-28 09:44:37.000000000 +0100
@@ -137,12 +137,8 @@ int snd_emux_free(snd_emux_t *emu)
if (emu->sflist)
snd_sf_free(emu->sflist);

- if (emu->voices)
- kfree(emu->voices);
-
- if (emu->name)
- kfree(emu->name);
-
+ kfree(emu->voices);
+ kfree(emu->name);
kfree(emu);
return 0;
}
diff -urpN linux-2.6.10/sound/synth/emux/emux_seq.c linux-2.6.10-new/sound/synth/emux/emux_seq.c
--- linux-2.6.10/sound/synth/emux/emux_seq.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/synth/emux/emux_seq.c 2004-11-28 09:44:37.000000000 +0100
@@ -197,8 +197,7 @@ free_port(void *private_data)
#ifdef SNDRV_EMUX_USE_RAW_EFFECT
snd_emux_delete_effect(p);
#endif
- if (p->chset.channels)
- kfree(p->chset.channels);
+ kfree(p->chset.channels);
kfree(p);
}
}
diff -urpN linux-2.6.10/sound/usb/usbaudio.c linux-2.6.10-new/sound/usb/usbaudio.c
--- linux-2.6.10/sound/usb/usbaudio.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/usb/usbaudio.c 2004-11-28 09:44:37.000000000 +0100
@@ -2063,8 +2063,7 @@ static void free_substream(snd_usb_subst
return; /* not initialized */
list_for_each_safe(p, n, &subs->fmt_list) {
struct audioformat *fp = list_entry(p, struct audioformat, list);
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
}
}
@@ -2550,8 +2549,7 @@ static int parse_audio_endpoints(snd_usb

/* ok, let's parse further... */
if (parse_audio_format(dev, fp, format, fmt, stream) < 0) {
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
continue;
}
@@ -2559,8 +2557,7 @@ static int parse_audio_endpoints(snd_usb
snd_printdd(KERN_INFO "%d:%u:%d: add audio endpoint 0x%x\n", dev->devnum, iface_no, i, fp->endpoint);
err = add_audio_endpoint(chip, stream, fp);
if (err < 0) {
- if (fp->rate_table)
- kfree(fp->rate_table);
+ kfree(fp->rate_table);
kfree(fp);
return err;
}
@@ -2693,15 +2690,13 @@ static int create_fixed_stream_quirk(snd
err = add_audio_endpoint(chip, stream, fp);
if (err < 0) {
kfree(fp);
- if (rate_table)
- kfree(rate_table);
+ kfree(rate_table);
return err;
}
if (fp->iface != get_iface_desc(&iface->altsetting[0])->bInterfaceNumber ||
fp->altset_idx >= iface->num_altsetting) {
kfree(fp);
- if (rate_table)
- kfree(rate_table);
+ kfree(rate_table);
return -EINVAL;
}
alts = &iface->altsetting[fp->altset_idx];
diff -urpN linux-2.6.10/sound/usb/usbmidi.c linux-2.6.10-new/sound/usb/usbmidi.c
--- linux-2.6.10/sound/usb/usbmidi.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/usb/usbmidi.c 2004-11-28 09:44:37.000000000 +0100
@@ -504,8 +504,7 @@ static snd_rawmidi_ops_t snd_usbmidi_inp
static void snd_usbmidi_in_endpoint_delete(snd_usb_midi_in_endpoint_t* ep)
{
if (ep->urb) {
- if (ep->urb->transfer_buffer)
- kfree(ep->urb->transfer_buffer);
+ kfree(ep->urb->transfer_buffer);
usb_free_urb(ep->urb);
}
kfree(ep);
@@ -632,8 +631,7 @@ static void snd_usbmidi_out_endpoint_del
if (ep->tasklet.func)
tasklet_kill(&ep->tasklet);
if (ep->urb) {
- if (ep->urb->transfer_buffer)
- kfree(ep->urb->transfer_buffer);
+ kfree(ep->urb->transfer_buffer);
usb_free_urb(ep->urb);
}
kfree(ep);
diff -urpN linux-2.6.10/sound/usb/usbmixer.c linux-2.6.10-new/sound/usb/usbmixer.c
--- linux-2.6.10/sound/usb/usbmixer.c 2004-09-13 19:45:34.000000000 +0200
+++ linux-2.6.10-new/sound/usb/usbmixer.c 2004-11-28 09:44:37.000000000 +0100
@@ -573,7 +573,7 @@ static struct usb_feature_control_info a
static void usb_mixer_elem_free(snd_kcontrol_t *kctl)
{
if (kctl->private_data) {
- kfree((void *)kctl->private_data);
+ kfree(kctl->private_data);
kctl->private_data = NULL;
}
}
diff -urpN linux-2.6.10/sound/usb/usx2y/usbusx2y.c linux-2.6.10-new/sound/usb/usx2y/usbusx2y.c
--- linux-2.6.10/sound/usb/usx2y/usbusx2y.c 2004-11-15 15:55:12.000000000 +0100
+++ linux-2.6.10-new/sound/usb/usx2y/usbusx2y.c 2004-11-28 09:44:37.000000000 +0100
@@ -285,8 +285,7 @@ static void usX2Y_unlinkSeq(snd_usX2Y_As
S->urb[i] = NULL;
}
}
- if (S->buffer)
- kfree(S->buffer);
+ kfree(S->buffer);
}


@@ -389,8 +388,7 @@ static struct usb_driver snd_usX2Y_usb_d

static void snd_usX2Y_card_private_free(snd_card_t *card)
{
- if (usX2Y(card)->In04Buf)
- kfree(usX2Y(card)->In04Buf);
+ kfree(usX2Y(card)->In04Buf);
usb_free_urb(usX2Y(card)->In04urb);
if (usX2Y(card)->us428ctls_sharedmem)
snd_free_pages(usX2Y(card)->us428ctls_sharedmem, sizeof(*usX2Y(card)->us428ctls_sharedmem));

--
Marcel Sebek
jabber: [email protected] ICQ: 279852819
linux user number: 307850 GPG ID: 5F88735E
GPG FP: 0F01 BAB8 3148 94DB B95D 1FCA 8B63 CA06 5F88 735E


Attachments:
(No filename) (27.08 kB)
signature.asc (189.00 B)
Digital signature
Download all attachments

2004-11-29 14:18:31

by Takashi Iwai

[permalink] [raw]
Subject: Re: [Alsa-devel] Re: [PATCH] Document kfree and vfree NULL usage

At Sun, 28 Nov 2004 10:04:07 +0100,
Marcel Sebek wrote:
>
> [1 <text/plain; us-ascii (quoted-printable)>]
> On Sun, Nov 28, 2004 at 10:05:55AM +0200, Pekka Enberg wrote:
> > On Sat, Nov 27, 2004 at 09:43:17PM +0100, Marcel Sebek wrote:
> > > > diff -urpN linux-2.6.10/sound/core/init.c linux-2.6.10-new/sound/core/init.c
> > > > --- linux-2.6.10/sound/core/init.c 2004-10-23 10:55:09.000000000 +0200
> > > > +++ linux-2.6.10-new/sound/core/init.c 2004-11-27 21:21:50.000000000 +0100
> > > > @@ -665,9 +665,8 @@ int snd_card_file_remove(snd_card_t *car
> > > > spin_unlock(&card->files_lock);
> > > > if (card->files == NULL)
> > > > wake_up(&card->shutdown_sleep);
> > > > - if (mfile) {
> > > > - kfree(mfile);
> > > > - } else {
> > > > + kfree(mfile);
> > > > + if (!mfile) {
> > > > snd_printk(KERN_ERR "ALSA card file remove problem (%p)\n", file);
> > > > return -ENOENT;
> > > > }
> >
> > On Sat, 2004-11-27 at 13:23 -0800, Phil Oester wrote:
> > > The above change seems to always trigger the ENOENT return, no?
> >
> > No it doesn't. kfree() does not set mfile to NULL. However, I think the
> > above would be more readable if we did the kfree() _after_ the NULL
> > check. Marcel, what do you think?
> >
>
> I think yes. The change I did only added one extra kfree call for
> (mfile == NULL) and didn't save the NULL check. So here's an updated
> version of the patch (and hopefully the final version :).
>
> Signed-off-by: Marcel Sebek <[email protected]>

The new patch is missing the open brace :)

Anyway, I applied your patch to ALSA tree. Thanks.


Takashi