Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f43aa025 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Fix another cache list management



Fix another silly bug in the amp cache list management.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 0edb9454
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -887,11 +887,10 @@ static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
{
	u16 idx = key % (u16)ARRAY_SIZE(cache->hash);
	u16 cur = cache->hash[idx];
	struct hda_cache_head *info_head = cache->buf.list;
	struct hda_cache_head *info;

	while (cur != 0xffff) {
		info = &info_head[cur];
		info = snd_array_elem(&cache->buf, cur);
		if (info->key == key)
			return info;
		cur = info->next;
@@ -901,7 +900,7 @@ static struct hda_cache_head *get_alloc_hash(struct hda_cache_rec *cache,
	info = snd_array_new(&cache->buf);
	if (!info)
		return NULL;
	cur = cache->buf.used - 1; /* the last entry */
	cur = snd_array_index(&cache->buf, info);
	info->key = key;
	info->val = 0;
	info->next = cache->hash[idx];
@@ -3414,7 +3413,7 @@ void *snd_array_new(struct snd_array *array)
		array->list = nlist;
		array->alloced = num;
	}
	return array->list + (array->used++ * array->elem_size);
	return snd_array_elem(array, array->used++);
}

/* free the given array elements */
+10 −0
Original line number Diff line number Diff line
@@ -539,6 +539,16 @@ static inline void snd_array_init(struct snd_array *array, unsigned int size,
	array->alloc_align = align;
}

static inline void *snd_array_elem(struct snd_array *array, unsigned int idx)
{
	return array->list + idx * array->elem_size;
}

static inline unsigned int snd_array_index(struct snd_array *array, void *ptr)
{
	return (unsigned long)(ptr - array->list) / array->elem_size;
}

/*
 * Structures
 */