[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <s5h3aet8joa.wl%tiwai@suse.de>
Date: Thu, 05 Feb 2009 07:47:01 +0100
From: Takashi Iwai <tiwai@...e.de>
To: Andrew Morton <akpm@...ux-foundation.org>
Cc: Alex Romosan <romosan@...orax.lbl.gov>,
linux-kernel@...r.kernel.org
Subject: Re: 2.6.29-rc3: weird process after resume
At Wed, 4 Feb 2009 18:56:45 -0800,
Andrew Morton wrote:
>
> On Wed, 4 Feb 2009 18:31:42 -0800 Andrew Morton <akpm@...ux-foundation.org> wrote:
>
> > On Wed, 04 Feb 2009 17:45:13 -0800 Alex Romosan <romosan@...orax.lbl.gov> wrote:
> >
> > > Andrew Morton <akpm@...ux-foundation.org> writes:
> > >
> > > > On Wed, 04 Feb 2009 09:25:20 -0800
> > > > Alex Romosan <romosan@...orax.lbl.gov> wrote:
> > > >
> > > >> this is on a thinkpad t61p with an intel core2 cpu. i just noticed
> > > >> that after resuming from suspending to memory i get a weirdly named
> > > >> process. i did a ps before and after and the only difference was that
> > > >> before i had this process:
> > > >>
> > > >> [hda0/1]
> > > >>
> > > >> and after this one:
> > > >>
> > > >> [__?__;??____D__"?______]
> > > >>
> > > >> with everything else being the same. the laptop seems to be working
> > > >> fine and the problem could have been there for a while but i just
> > > >> didn't notice it. i am including my .config file. let me know if you
> > > >> need anything else.
> > > >
> > > > Were earlier kernels OK? If so, which version?
> > >
> > > i just tried 2.6.28 and there was no [hda0] kernel thread. 2.6.29-rc1
> > > and rc2 never resumed from suspend so i couldn't really try it.
> > >
> > > > What the heck is that kernel thread anyway? It looks like something
> > > > derived from an IDE device.
> > >
> > > i have no idea. hda is the cdrom (the disk is sata and shows up as
> > > sda).
> > >
> >
> > <rummages through a 68MB diff for a while>
> >
> > <finds a plum>
> >
> > + snprintf(qname, sizeof(qname), "hda%d", card->number);
> > + bus->workq = create_workqueue(qname);
> > + if (!bus->workq) {
> > + snd_printk(KERN_ERR "cannot create workqueue %s\n", qname);
> > + kfree(bus);
> > + return -ENOMEM;
> > + }
> >
> > so it's not IDE after all.
> >
> > commit 6acaed38a32e8571e92cfc832b971f9e4450c207
> > Author: Takashi Iwai <tiwai@...e.de>
> > AuthorDate: Mon Jan 12 10:09:24 2009 +0100
> > Commit: Takashi Iwai <tiwai@...e.de>
> > CommitDate: Mon Jan 12 10:33:56 2009 +0100
> >
> > ALSA: hda - Use own workqueue
> >
>
> btw. Please use create_singlethread_workqueue() if at all possible. I
> don't think we need a thread per CPU here.
Sorry I always forget that...
Alex, could you try the patch below? It's now in sound git tree:
git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git
thanks,
Takashi
===
>From e8c0ee5d77ec0f144c753a622c67dd96fa195d50 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@...e.de>
Date: Thu, 5 Feb 2009 07:34:28 +0100
Subject: [PATCH] ALSA: hda - Fix misc workqueue issues
Some fixes regarding snd-hda-intel workqueue:
- Use create_singlethread_workqueue() instead of create_workqueue()
as per-CPU work isn't required.
- Allocate workq name string properly
- Renamed the workq name to "hd-audio*" to be more obvious.
Signed-off-by: Takashi Iwai <tiwai@...e.de>
---
sound/pci/hda/hda_codec.c | 9 +++++----
sound/pci/hda/hda_codec.h | 1 +
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index b7bba7d..0b70813 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -487,7 +487,6 @@ int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
{
struct hda_bus *bus;
int err;
- char qname[8];
static struct snd_device_ops dev_ops = {
.dev_register = snd_hda_bus_dev_register,
.dev_free = snd_hda_bus_dev_free,
@@ -517,10 +516,12 @@ int /*__devinit*/ snd_hda_bus_new(struct snd_card *card,
mutex_init(&bus->cmd_mutex);
INIT_LIST_HEAD(&bus->codec_list);
- snprintf(qname, sizeof(qname), "hda%d", card->number);
- bus->workq = create_workqueue(qname);
+ snprintf(bus->workq_name, sizeof(bus->workq_name),
+ "hd-audio%d", card->number);
+ bus->workq = create_singlethread_workqueue(bus->workq_name);
if (!bus->workq) {
- snd_printk(KERN_ERR "cannot create workqueue %s\n", qname);
+ snd_printk(KERN_ERR "cannot create workqueue %s\n",
+ bus->workq_name);
kfree(bus);
return -ENOMEM;
}
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
index 5810ef5..09a332a 100644
--- a/sound/pci/hda/hda_codec.h
+++ b/sound/pci/hda/hda_codec.h
@@ -614,6 +614,7 @@ struct hda_bus {
/* unsolicited event queue */
struct hda_bus_unsolicited *unsol;
+ char workq_name[16];
struct workqueue_struct *workq; /* common workqueue for codecs */
/* assigned PCMs */
--
1.6.1.2
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists