| From 176463a00cbb8fe932981d41302adc68df9b2390 Mon Sep 17 00:00:00 2001 |
| From: Takashi Iwai <tiwai@suse.de> |
| Date: Mon, 23 Dec 2019 23:18:16 +0100 |
| Subject: [PATCH] ALSA: hda - Apply sync-write workaround to old Intel |
| platforms, too |
| |
| commit c366b3dbbab14b28d044b94eb9ce77c23482ea35 upstream. |
| |
| Klaus Ethgen reported occasional high CPU usages in his system that |
| seem caused by HD-audio driver. The perf output revealed that it's |
| in the unsolicited event handling in the workqueue, and the problem |
| seems triggered by some communication stall between the controller and |
| the codec at the runtime or system resume. |
| |
| Actually a similar phenomenon was seen in the past for other Intel |
| platforms, and we already applied the workaround to enforce sync-write |
| for CORB/RIRB verbs for Skylake and newer chipsets (commit |
| 2756d9143aa5 "ALSA: hda - Fix intermittent CORB/RIRB stall on Intel |
| chips"). Fortunately, the same workaround is applicable to the old |
| chipset, and the experiment showed the positive effect. |
| |
| Based on the experiment result, this patch enables the sync-write |
| workaround for all Intel chipsets. The only reason I hesitated to |
| apply this workaround was about the possibly slightly higher CPU usage. |
| But if the lack of sync causes a much severer problem even for quite |
| old chip, we should think this would be necessary for all Intel chips. |
| |
| Reported-by: Klaus Ethgen <Klaus@ethgen.ch> |
| Cc: <stable@vger.kernel.org> |
| Link: https://lore.kernel.org/r/20191223171833.GA17053@chua |
| Link: https://lore.kernel.org/r/20191223221816.32572-1-tiwai@suse.de |
| Signed-off-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c |
| index 15aecf433367..4641626ac015 100644 |
| --- a/sound/pci/hda/hda_intel.c |
| +++ b/sound/pci/hda/hda_intel.c |
| @@ -277,12 +277,13 @@ enum { |
| |
| /* quirks for old Intel chipsets */ |
| #define AZX_DCAPS_INTEL_ICH \ |
| - (AZX_DCAPS_OLD_SSYNC | AZX_DCAPS_NO_ALIGN_BUFSIZE) |
| + (AZX_DCAPS_OLD_SSYNC | AZX_DCAPS_NO_ALIGN_BUFSIZE |\ |
| + AZX_DCAPS_SYNC_WRITE) |
| |
| /* quirks for Intel PCH */ |
| #define AZX_DCAPS_INTEL_PCH_BASE \ |
| (AZX_DCAPS_NO_ALIGN_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY |\ |
| - AZX_DCAPS_SNOOP_TYPE(SCH)) |
| + AZX_DCAPS_SNOOP_TYPE(SCH) | AZX_DCAPS_SYNC_WRITE) |
| |
| /* PCH up to IVB; no runtime PM; bind with i915 gfx */ |
| #define AZX_DCAPS_INTEL_PCH_NOPM \ |
| @@ -297,13 +298,13 @@ enum { |
| #define AZX_DCAPS_INTEL_HASWELL \ |
| (/*AZX_DCAPS_ALIGN_BUFSIZE |*/ AZX_DCAPS_COUNT_LPIB_DELAY |\ |
| AZX_DCAPS_PM_RUNTIME | AZX_DCAPS_I915_COMPONENT |\ |
| - AZX_DCAPS_SNOOP_TYPE(SCH)) |
| + AZX_DCAPS_SNOOP_TYPE(SCH) | AZX_DCAPS_SYNC_WRITE) |
| |
| /* Broadwell HDMI can't use position buffer reliably, force to use LPIB */ |
| #define AZX_DCAPS_INTEL_BROADWELL \ |
| (/*AZX_DCAPS_ALIGN_BUFSIZE |*/ AZX_DCAPS_POSFIX_LPIB |\ |
| AZX_DCAPS_PM_RUNTIME | AZX_DCAPS_I915_COMPONENT |\ |
| - AZX_DCAPS_SNOOP_TYPE(SCH)) |
| + AZX_DCAPS_SNOOP_TYPE(SCH) | AZX_DCAPS_SYNC_WRITE) |
| |
| #define AZX_DCAPS_INTEL_BAYTRAIL \ |
| (AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_I915_COMPONENT) |
| -- |
| 2.7.4 |
| |