• K
    [ALSA] Reduce interrupt latency in sound/pci/via82xx.c · 4f550df5
    Karsten Wiese 提交于
    Modules: VIA82xx driver
    
    The change only affects the via823x kind of chips.
    Here the  via8233_pcm_pointer_hw() function
    (named snd_via8233_pcm_pointer() before)
    needed to loop until a non zero position is red from the chip.
    
    Measurements have shown that more than 200 loops are typically needed on
    an Athlon64.
    As io-reads cost many cycles, those loops sum up huge.
    via8233_pcm_pointer_hw() runs either in interrupt or with interrupts
    disabled. So it introduces significant interrupt latency.
    
    The patch introduces a calculated position value hwptr_done,
    that is updated by the interrupt routine when a period is completed.
    It is only used, if the 823x chip returns a zero position, which can't
    be interpreted reliably.
    
    Further optimisation is applied on the 8233 chip's interrupt routine:
    Only the SGD_SHADOW is read, as it contains all infos needed.
    We ommit ~5 more register reads that way.
    Signed-off-by: NKarsten Wiese <annabellesgarden@yahoo.de>
    Signed-off-by: NTakashi Iwai <tiwai@suse.de>
    4f550df5
via82xx.c 74.9 KB