* [PATCH 0/4] ak411x fix patches for ice1724 Juli@
@ 2015-01-16 17:16 Takashi Iwai
2015-01-16 17:16 ` [PATCH 1/4] ALSA: ak411x: Fix stall in work callback Takashi Iwai
` (4 more replies)
0 siblings, 5 replies; 7+ messages in thread
From: Takashi Iwai @ 2015-01-16 17:16 UTC (permalink / raw)
To: alsa-devel; +Cc: Pavel Hofman
Hi,
here is a bit more cooked patch series for ak411x and juli@ device.
[PATCH 1/4] ALSA: ak411x: Fix stall in work callback
[PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function
[PATCH 3/4] ALSA: ak411x: Add PM helper functions
[PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls
Takashi
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/4] ALSA: ak411x: Fix stall in work callback
2015-01-16 17:16 [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Takashi Iwai
@ 2015-01-16 17:16 ` Takashi Iwai
2015-01-16 17:16 ` [PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function Takashi Iwai
` (3 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2015-01-16 17:16 UTC (permalink / raw)
To: alsa-devel; +Cc: Pavel Hofman
When ak4114 work calls its callback and the callback invokes
ak4114_reinit(), it stalls due to flush_delayed_work(). For avoiding
this, control the reentrance by introducing a refcount. Also
flush_delayed_work() is replaced with cancel_delayed_work_sync().
The exactly same bug is present in ak4113.c and fixed as well.
Reported-by: Pavel Hofman <pavel.hofman@ivitera.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
include/sound/ak4113.h | 2 +-
include/sound/ak4114.h | 2 +-
sound/i2c/other/ak4113.c | 17 ++++++++---------
sound/i2c/other/ak4114.c | 18 ++++++++----------
4 files changed, 18 insertions(+), 21 deletions(-)
diff --git a/include/sound/ak4113.h b/include/sound/ak4113.h
index 2609048c1d44..3a34f6edc2d1 100644
--- a/include/sound/ak4113.h
+++ b/include/sound/ak4113.h
@@ -286,7 +286,7 @@ struct ak4113 {
ak4113_write_t *write;
ak4113_read_t *read;
void *private_data;
- unsigned int init:1;
+ atomic_t wq_processing;
spinlock_t lock;
unsigned char regmap[AK4113_WRITABLE_REGS];
struct snd_kcontrol *kctls[AK4113_CONTROLS];
diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h
index 52f02a60dba7..069299a88915 100644
--- a/include/sound/ak4114.h
+++ b/include/sound/ak4114.h
@@ -168,7 +168,7 @@ struct ak4114 {
ak4114_write_t * write;
ak4114_read_t * read;
void * private_data;
- unsigned int init: 1;
+ atomic_t wq_processing;
spinlock_t lock;
unsigned char regmap[6];
unsigned char txcsb[5];
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
index 1a3a6fa27158..c6bba99a90b2 100644
--- a/sound/i2c/other/ak4113.c
+++ b/sound/i2c/other/ak4113.c
@@ -56,8 +56,7 @@ static inline unsigned char reg_read(struct ak4113 *ak4113, unsigned char reg)
static void snd_ak4113_free(struct ak4113 *chip)
{
- chip->init = 1; /* don't schedule new work */
- mb();
+ atomic_inc(&chip->wq_processing); /* don't schedule new work */
cancel_delayed_work_sync(&chip->work);
kfree(chip);
}
@@ -89,6 +88,7 @@ int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
chip->write = write;
chip->private_data = private_data;
INIT_DELAYED_WORK(&chip->work, ak4113_stats);
+ atomic_set(&chip->wq_processing, 0);
for (reg = 0; reg < AK4113_WRITABLE_REGS ; reg++)
chip->regmap[reg] = pgm[reg];
@@ -139,13 +139,11 @@ static void ak4113_init_regs(struct ak4113 *chip)
void snd_ak4113_reinit(struct ak4113 *chip)
{
- chip->init = 1;
- mb();
- flush_delayed_work(&chip->work);
+ if (atomic_inc_return(&chip->wq_processing) == 1)
+ cancel_delayed_work_sync(&chip->work);
ak4113_init_regs(chip);
/* bring up statistics / event queing */
- chip->init = 0;
- if (chip->kctls[0])
+ if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
}
EXPORT_SYMBOL_GPL(snd_ak4113_reinit);
@@ -632,8 +630,9 @@ static void ak4113_stats(struct work_struct *work)
{
struct ak4113 *chip = container_of(work, struct ak4113, work.work);
- if (!chip->init)
+ if (atomic_inc_return(&chip->wq_processing) == 1)
snd_ak4113_check_rate_and_errors(chip, chip->check_flags);
- schedule_delayed_work(&chip->work, HZ / 10);
+ if (atomic_dec_and_test(&chip->wq_processing))
+ schedule_delayed_work(&chip->work, HZ / 10);
}
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index c7f56339415d..b70e6eccbd03 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -66,8 +66,7 @@ static void reg_dump(struct ak4114 *ak4114)
static void snd_ak4114_free(struct ak4114 *chip)
{
- chip->init = 1; /* don't schedule new work */
- mb();
+ atomic_inc(&chip->wq_processing); /* don't schedule new work */
cancel_delayed_work_sync(&chip->work);
kfree(chip);
}
@@ -100,6 +99,7 @@ int snd_ak4114_create(struct snd_card *card,
chip->write = write;
chip->private_data = private_data;
INIT_DELAYED_WORK(&chip->work, ak4114_stats);
+ atomic_set(&chip->wq_processing, 0);
for (reg = 0; reg < 6; reg++)
chip->regmap[reg] = pgm[reg];
@@ -152,13 +152,11 @@ static void ak4114_init_regs(struct ak4114 *chip)
void snd_ak4114_reinit(struct ak4114 *chip)
{
- chip->init = 1;
- mb();
- flush_delayed_work(&chip->work);
+ if (atomic_inc_return(&chip->wq_processing) == 1)
+ cancel_delayed_work_sync(&chip->work);
ak4114_init_regs(chip);
/* bring up statistics / event queing */
- chip->init = 0;
- if (chip->kctls[0])
+ if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
}
@@ -612,10 +610,10 @@ static void ak4114_stats(struct work_struct *work)
{
struct ak4114 *chip = container_of(work, struct ak4114, work.work);
- if (!chip->init)
+ if (atomic_inc_return(&chip->wq_processing) == 1)
snd_ak4114_check_rate_and_errors(chip, chip->check_flags);
-
- schedule_delayed_work(&chip->work, HZ / 10);
+ if (atomic_dec_and_test(&chip->wq_processing))
+ schedule_delayed_work(&chip->work, HZ / 10);
}
EXPORT_SYMBOL(snd_ak4114_create);
--
2.2.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function
2015-01-16 17:16 [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Takashi Iwai
2015-01-16 17:16 ` [PATCH 1/4] ALSA: ak411x: Fix stall in work callback Takashi Iwai
@ 2015-01-16 17:16 ` Takashi Iwai
2015-01-16 17:16 ` [PATCH 3/4] ALSA: ak411x: Add PM helper functions Takashi Iwai
` (2 subsequent siblings)
4 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2015-01-16 17:16 UTC (permalink / raw)
To: alsa-devel; +Cc: Pavel Hofman
... just to follow the standard coding style.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/i2c/other/ak4114.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index b70e6eccbd03..f6ee1e7a9bbd 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -122,6 +122,7 @@ int snd_ak4114_create(struct snd_card *card,
snd_ak4114_free(chip);
return err < 0 ? err : -EIO;
}
+EXPORT_SYMBOL(snd_ak4114_create);
void snd_ak4114_reg_write(struct ak4114 *chip, unsigned char reg, unsigned char mask, unsigned char val)
{
@@ -131,6 +132,7 @@ void snd_ak4114_reg_write(struct ak4114 *chip, unsigned char reg, unsigned char
reg_write(chip, reg,
(chip->txcsb[reg-AK4114_REG_TXCSB0] & ~mask) | val);
}
+EXPORT_SYMBOL(snd_ak4114_reg_write);
static void ak4114_init_regs(struct ak4114 *chip)
{
@@ -159,6 +161,7 @@ void snd_ak4114_reinit(struct ak4114 *chip)
if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
}
+EXPORT_SYMBOL(snd_ak4114_reinit);
static unsigned int external_rate(unsigned char rcs1)
{
@@ -503,6 +506,7 @@ int snd_ak4114_build(struct ak4114 *ak4114,
schedule_delayed_work(&ak4114->work, HZ / 10);
return 0;
}
+EXPORT_SYMBOL(snd_ak4114_build);
/* notify kcontrols if any parameters are changed */
static void ak4114_notify(struct ak4114 *ak4114,
@@ -558,6 +562,7 @@ int snd_ak4114_external_rate(struct ak4114 *ak4114)
rcs1 = reg_read(ak4114, AK4114_REG_RCS1);
return external_rate(rcs1);
}
+EXPORT_SYMBOL(snd_ak4114_external_rate);
int snd_ak4114_check_rate_and_errors(struct ak4114 *ak4114, unsigned int flags)
{
@@ -605,6 +610,7 @@ int snd_ak4114_check_rate_and_errors(struct ak4114 *ak4114, unsigned int flags)
}
return res;
}
+EXPORT_SYMBOL(snd_ak4114_check_rate_and_errors);
static void ak4114_stats(struct work_struct *work)
{
@@ -615,10 +621,3 @@ static void ak4114_stats(struct work_struct *work)
if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
}
-
-EXPORT_SYMBOL(snd_ak4114_create);
-EXPORT_SYMBOL(snd_ak4114_reg_write);
-EXPORT_SYMBOL(snd_ak4114_reinit);
-EXPORT_SYMBOL(snd_ak4114_build);
-EXPORT_SYMBOL(snd_ak4114_external_rate);
-EXPORT_SYMBOL(snd_ak4114_check_rate_and_errors);
--
2.2.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/4] ALSA: ak411x: Add PM helper functions
2015-01-16 17:16 [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Takashi Iwai
2015-01-16 17:16 ` [PATCH 1/4] ALSA: ak411x: Fix stall in work callback Takashi Iwai
2015-01-16 17:16 ` [PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function Takashi Iwai
@ 2015-01-16 17:16 ` Takashi Iwai
2015-01-16 17:16 ` [PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls Takashi Iwai
2015-01-16 17:27 ` [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Jaroslav Kysela
4 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2015-01-16 17:16 UTC (permalink / raw)
To: alsa-devel; +Cc: Pavel Hofman
Define snd_ak4114_suspend() and snd_ak4114_resume() functions to
handle PM properly, stopping and restarting the work at PM.
Currently only ice1712/juli.c deals with the PM and ak4114, so fix the
calls there appropriately.
The same PM functions are defined in ak4113.c, too, although they
aren't currently called yet (ice1712/quartet.c may be enhanced to
support PM later).
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
include/sound/ak4113.h | 8 ++++++++
include/sound/ak4114.h | 8 ++++++++
sound/i2c/other/ak4113.c | 16 ++++++++++++++++
sound/i2c/other/ak4114.c | 16 ++++++++++++++++
sound/pci/ice1712/juli.c | 4 +++-
5 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/include/sound/ak4113.h b/include/sound/ak4113.h
index 3a34f6edc2d1..f4fbf6888e78 100644
--- a/include/sound/ak4113.h
+++ b/include/sound/ak4113.h
@@ -317,5 +317,13 @@ int snd_ak4113_build(struct ak4113 *ak4113,
int snd_ak4113_external_rate(struct ak4113 *ak4113);
int snd_ak4113_check_rate_and_errors(struct ak4113 *ak4113, unsigned int flags);
+#ifdef CONFIG_PM
+void snd_ak4113_suspend(struct ak4113 *chip);
+void snd_ak4113_resume(struct ak4113 *chip);
+#else
+static inline void snd_ak4113_suspend(struct ak4113 *chip) {}
+static inline void snd_ak4113_resume(struct ak4113 *chip) {}
+#endif
+
#endif /* __SOUND_AK4113_H */
diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h
index 069299a88915..e681df2c95e1 100644
--- a/include/sound/ak4114.h
+++ b/include/sound/ak4114.h
@@ -199,5 +199,13 @@ int snd_ak4114_build(struct ak4114 *ak4114,
int snd_ak4114_external_rate(struct ak4114 *ak4114);
int snd_ak4114_check_rate_and_errors(struct ak4114 *ak4114, unsigned int flags);
+#ifdef CONFIG_PM
+void snd_ak4114_suspend(struct ak4114 *chip);
+void snd_ak4114_resume(struct ak4114 *chip);
+#else
+static inline void snd_ak4114_suspend(struct ak4114 *chip) {}
+static inline void snd_ak4114_resume(struct ak4114 *chip) {}
+#endif
+
#endif /* __SOUND_AK4114_H */
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
index c6bba99a90b2..c2b14d981fa1 100644
--- a/sound/i2c/other/ak4113.c
+++ b/sound/i2c/other/ak4113.c
@@ -636,3 +636,19 @@ static void ak4113_stats(struct work_struct *work)
if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
}
+
+#ifdef CONFIG_PM
+void snd_ak4113_suspend(struct ak4113 *chip)
+{
+ atomic_inc(&chip->wq_processing); /* don't schedule new work */
+ cancel_delayed_work_sync(&chip->work);
+}
+EXPORT_SYMBOL(snd_ak4113_suspend);
+
+void snd_ak4113_resume(struct ak4113 *chip)
+{
+ atomic_dec(&chip->wq_processing);
+ snd_ak4113_reinit(chip);
+}
+EXPORT_SYMBOL(snd_ak4113_resume);
+#endif
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index f6ee1e7a9bbd..ee639f57b664 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -621,3 +621,19 @@ static void ak4114_stats(struct work_struct *work)
if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
}
+
+#ifdef CONFIG_PM
+void snd_ak4114_suspend(struct ak4114 *chip)
+{
+ atomic_inc(&chip->wq_processing); /* don't schedule new work */
+ cancel_delayed_work_sync(&chip->work);
+}
+EXPORT_SYMBOL(snd_ak4114_suspend);
+
+void snd_ak4114_resume(struct ak4114 *chip)
+{
+ atomic_dec(&chip->wq_processing);
+ snd_ak4114_reinit(chip);
+}
+EXPORT_SYMBOL(snd_ak4114_resume);
+#endif
diff --git a/sound/pci/ice1712/juli.c b/sound/pci/ice1712/juli.c
index a1536c1a7ed4..4f0213427152 100644
--- a/sound/pci/ice1712/juli.c
+++ b/sound/pci/ice1712/juli.c
@@ -491,15 +491,17 @@ static int juli_resume(struct snd_ice1712 *ice)
/* akm4358 un-reset, un-mute */
snd_akm4xxx_reset(ak, 0);
/* reinit ak4114 */
- snd_ak4114_reinit(spec->ak4114);
+ snd_ak4114_resume(spec->ak4114);
return 0;
}
static int juli_suspend(struct snd_ice1712 *ice)
{
struct snd_akm4xxx *ak = ice->akm;
+ struct juli_spec *spec = ice->spec;
/* akm4358 reset and soft-mute */
snd_akm4xxx_reset(ak, 1);
+ snd_ak4114_suspend(spec->ak4114);
return 0;
}
#endif
--
2.2.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls
2015-01-16 17:16 [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Takashi Iwai
` (2 preceding siblings ...)
2015-01-16 17:16 ` [PATCH 3/4] ALSA: ak411x: Add PM helper functions Takashi Iwai
@ 2015-01-16 17:16 ` Takashi Iwai
2015-01-16 17:27 ` [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Jaroslav Kysela
4 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2015-01-16 17:16 UTC (permalink / raw)
To: alsa-devel; +Cc: Pavel Hofman
Protect the call with a mutex, as this may be called in parallel
(either from the PCM rate change and the clock change).
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
include/sound/ak4113.h | 1 +
include/sound/ak4114.h | 1 +
sound/i2c/other/ak4113.c | 3 +++
sound/i2c/other/ak4114.c | 3 +++
4 files changed, 8 insertions(+)
diff --git a/include/sound/ak4113.h b/include/sound/ak4113.h
index f4fbf6888e78..58c145620c3c 100644
--- a/include/sound/ak4113.h
+++ b/include/sound/ak4113.h
@@ -287,6 +287,7 @@ struct ak4113 {
ak4113_read_t *read;
void *private_data;
atomic_t wq_processing;
+ struct mutex reinit_mutex;
spinlock_t lock;
unsigned char regmap[AK4113_WRITABLE_REGS];
struct snd_kcontrol *kctls[AK4113_CONTROLS];
diff --git a/include/sound/ak4114.h b/include/sound/ak4114.h
index e681df2c95e1..b6feb7e225f2 100644
--- a/include/sound/ak4114.h
+++ b/include/sound/ak4114.h
@@ -169,6 +169,7 @@ struct ak4114 {
ak4114_read_t * read;
void * private_data;
atomic_t wq_processing;
+ struct mutex reinit_mutex;
spinlock_t lock;
unsigned char regmap[6];
unsigned char txcsb[5];
diff --git a/sound/i2c/other/ak4113.c b/sound/i2c/other/ak4113.c
index c2b14d981fa1..88844881cbff 100644
--- a/sound/i2c/other/ak4113.c
+++ b/sound/i2c/other/ak4113.c
@@ -89,6 +89,7 @@ int snd_ak4113_create(struct snd_card *card, ak4113_read_t *read,
chip->private_data = private_data;
INIT_DELAYED_WORK(&chip->work, ak4113_stats);
atomic_set(&chip->wq_processing, 0);
+ mutex_init(&chip->reinit_mutex);
for (reg = 0; reg < AK4113_WRITABLE_REGS ; reg++)
chip->regmap[reg] = pgm[reg];
@@ -141,7 +142,9 @@ void snd_ak4113_reinit(struct ak4113 *chip)
{
if (atomic_inc_return(&chip->wq_processing) == 1)
cancel_delayed_work_sync(&chip->work);
+ mutex_lock(&chip->reinit_mutex);
ak4113_init_regs(chip);
+ mutex_unlock(&chip->reinit_mutex);
/* bring up statistics / event queing */
if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
diff --git a/sound/i2c/other/ak4114.c b/sound/i2c/other/ak4114.c
index ee639f57b664..5a4cf3fab4ae 100644
--- a/sound/i2c/other/ak4114.c
+++ b/sound/i2c/other/ak4114.c
@@ -100,6 +100,7 @@ int snd_ak4114_create(struct snd_card *card,
chip->private_data = private_data;
INIT_DELAYED_WORK(&chip->work, ak4114_stats);
atomic_set(&chip->wq_processing, 0);
+ mutex_init(&chip->reinit_mutex);
for (reg = 0; reg < 6; reg++)
chip->regmap[reg] = pgm[reg];
@@ -156,7 +157,9 @@ void snd_ak4114_reinit(struct ak4114 *chip)
{
if (atomic_inc_return(&chip->wq_processing) == 1)
cancel_delayed_work_sync(&chip->work);
+ mutex_lock(&chip->reinit_mutex);
ak4114_init_regs(chip);
+ mutex_unlock(&chip->reinit_mutex);
/* bring up statistics / event queing */
if (atomic_dec_and_test(&chip->wq_processing))
schedule_delayed_work(&chip->work, HZ / 10);
--
2.2.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 0/4] ak411x fix patches for ice1724 Juli@
2015-01-16 17:16 [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Takashi Iwai
` (3 preceding siblings ...)
2015-01-16 17:16 ` [PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls Takashi Iwai
@ 2015-01-16 17:27 ` Jaroslav Kysela
2015-01-16 20:41 ` Takashi Iwai
4 siblings, 1 reply; 7+ messages in thread
From: Jaroslav Kysela @ 2015-01-16 17:27 UTC (permalink / raw)
To: Takashi Iwai, alsa-devel; +Cc: Pavel Hofman
Dne 16.1.2015 v 18:16 Takashi Iwai napsal(a):
> Hi,
>
> here is a bit more cooked patch series for ak411x and juli@ device.
>
> [PATCH 1/4] ALSA: ak411x: Fix stall in work callback
> [PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function
> [PATCH 3/4] ALSA: ak411x: Add PM helper functions
> [PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls
Acked-by: Jaroslav Kysela <perex@perex.cz>
for all of them...
Thanks,
Jaroslav
--
Jaroslav Kysela <perex@perex.cz>
Linux Kernel Sound Maintainer
ALSA Project; Red Hat, Inc.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/4] ak411x fix patches for ice1724 Juli@
2015-01-16 17:27 ` [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Jaroslav Kysela
@ 2015-01-16 20:41 ` Takashi Iwai
0 siblings, 0 replies; 7+ messages in thread
From: Takashi Iwai @ 2015-01-16 20:41 UTC (permalink / raw)
To: Jaroslav Kysela; +Cc: Pavel Hofman, alsa-devel
At Fri, 16 Jan 2015 18:27:39 +0100,
Jaroslav Kysela wrote:
>
> Dne 16.1.2015 v 18:16 Takashi Iwai napsal(a):
> > Hi,
> >
> > here is a bit more cooked patch series for ak411x and juli@ device.
> >
> > [PATCH 1/4] ALSA: ak411x: Fix stall in work callback
> > [PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function
> > [PATCH 3/4] ALSA: ak411x: Add PM helper functions
> > [PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls
>
> Acked-by: Jaroslav Kysela <perex@perex.cz>
>
> for all of them...
Thanks, added your ack to each commit now. They are found in
topic/ak411x-fix branch, not merged to for-next yet, though.
Takashi
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-01-16 20:41 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-16 17:16 [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Takashi Iwai
2015-01-16 17:16 ` [PATCH 1/4] ALSA: ak411x: Fix stall in work callback Takashi Iwai
2015-01-16 17:16 ` [PATCH 2/4] ALSA: ak4114: Move EXPORT_SYMBOL() after each function Takashi Iwai
2015-01-16 17:16 ` [PATCH 3/4] ALSA: ak411x: Add PM helper functions Takashi Iwai
2015-01-16 17:16 ` [PATCH 4/4] ALSA: ak411x: Fix race of reinit() calls Takashi Iwai
2015-01-16 17:27 ` [PATCH 0/4] ak411x fix patches for ice1724 Juli@ Jaroslav Kysela
2015-01-16 20:41 ` Takashi Iwai
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.