From: Arun Raghavan <arun.raghavan@collabora.co.uk>
To: David Henningsson <david.henningsson@canonical.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: [PATCH] ALSA: HDA: Lessen CPU usage when waiting for chip to respond
Date: Wed, 09 May 2012 01:35:52 +0530 [thread overview]
Message-ID: <1336507552.5353.3.camel@localhost> (raw)
In-Reply-To: <1336122355-6017-1-git-send-email-david.henningsson@canonical.com>
On Fri, 2012-05-04 at 11:05 +0200, David Henningsson wrote:
> When an IRQ for some reason gets lost, we wait up to a second using
> udelay, which is CPU intensive. This patch improves the situation by
> waiting about 30 ms in the CPU intensive mode, then stepping down to
> using msleep(2) instead. In essence, we trade some granularity in
> exchange for less CPU consumption when the waiting time is a bit longer.
>
> As a result, PulseAudio should no longer be killed by the kernel
> for taking up to much RT-prio CPU time. At least not for *this* reason.
>
> Signed-off-by: David Henningsson <david.henningsson@canonical.com>
> ---
> sound/pci/hda/hda_intel.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> Hi Arun,
>
> Can you check if this patch resolves your problem with PulseAudio getting
> killed by the kernel? If so, we should apply it to the kernel, perhaps even
> to stable.
>
> // David
Thanks, this fixes the problem for me. Don't know what the official
procedure for these things is, but fwiw:
Signed-off-by: Arun Raghavan <arun.raghavan@collabora.co.uk>
> diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
> index 7b6a823..0e7c3f1 100644
> --- a/sound/pci/hda/hda_intel.c
> +++ b/sound/pci/hda/hda_intel.c
> @@ -783,11 +783,13 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
> {
> struct azx *chip = bus->private_data;
> unsigned long timeout;
> + unsigned long loopcounter;
> int do_poll = 0;
>
> again:
> timeout = jiffies + msecs_to_jiffies(1000);
> - for (;;) {
> +
> + for (loopcounter = 0;; loopcounter++) {
> if (chip->polling_mode || do_poll) {
> spin_lock_irq(&chip->reg_lock);
> azx_update_rirb(chip);
> @@ -803,7 +805,7 @@ static unsigned int azx_rirb_get_response(struct hda_bus *bus,
> }
> if (time_after(jiffies, timeout))
> break;
> - if (bus->needs_damn_long_delay)
> + if (bus->needs_damn_long_delay || loopcounter > 3000)
> msleep(2); /* temporary workaround */
> else {
> udelay(10);
next prev parent reply other threads:[~2012-05-08 20:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-04 9:05 [PATCH] ALSA: HDA: Lessen CPU usage when waiting for chip to respond David Henningsson
2012-05-08 10:53 ` Takashi Iwai
2012-05-08 20:05 ` Arun Raghavan [this message]
2012-05-09 10:51 ` Takashi Iwai
2012-05-09 10:55 ` Arun Raghavan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1336507552.5353.3.camel@localhost \
--to=arun.raghavan@collabora.co.uk \
--cc=alsa-devel@alsa-project.org \
--cc=david.henningsson@canonical.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.