All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.