[alsa-devel] A bug about cache inconsistency report
Hi All,
Try send an email.
Appearance: when use non-snoop + ioctl path combination, an issue occurs: usage: aplay -D plughw:0,0 44100_S16_LE_2c.wav Ubuntu, it performance intermittently noise;
Root case: Function set_pages_array_wc marked the PTE of the original address; Function set_memory_wc marked the PTE both original and after vmaped address. [cid:image002.png@01D428FF.92621520] However, cache or not in transmission process is based on the PTE of the later, and the set_pages_array_wc did't mark it, so a cache inconsistency issue occurs.
Related bug: SHA1 ID: 9ddf1aeb2134e72275c97a2c6ff2e3eb04f2f27a
Best Regards! Hans Hu
????? ????????????????????????????????????????????????????? CONFIDENTIAL NOTE: This email contains confidential or legally privileged information and is for the sole use of its intended recipient. Any unauthorized review, use, copying or forwarding of this email or the content of this email is strictly prohibited.
On Tue, 31 Jul 2018 12:52:04 +0200, Hans Hu(SH-RD) wrote:
Hi All,
Try send an email. Appearance:
when use non-snoop + ioctl path combination, an issue occurs: usage: aplay -D plughw:0,0 44100_S16_LE_2c.wav Ubuntu, it performance intermittently noise;
Root case: Function set_pages_array_wc marked the PTE of the original address; Function set_memory_wc marked the PTE both original and after vmaped address. [cid:image002.png@01D428FF.92621520] However, cache or not in transmission process is based on the PTE of the later, and the set_pages_array_wc did't mark it, so a cache inconsistency issue occurs.
Related bug: SHA1 ID: 9ddf1aeb2134e72275c97a2c6ff2e3eb04f2f27a
OK, so did you confirm that dropping the SG buffer support "fixes" the noise problem on your system? The easiest test would be like:
--- a/sound/pci/hda/hda_controller.c +++ b/sound/pci/hda/hda_controller.c @@ -770,7 +770,7 @@ int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec, size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024; if (size > MAX_PREALLOC_SIZE) size = MAX_PREALLOC_SIZE; - snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, + snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, chip->card->dev, size, MAX_PREALLOC_SIZE); return 0;
thanks,
Takashi
participants (2)
-
Hans Hu(SH-RD)
-
Takashi Iwai