• Takashi Iwai's avatar
    ALSA: memalloc: Allocate more contiguous pages for fallback case · cc265163
    Takashi Iwai authored
    Currently the fallback SG allocation tries to allocate each single
    page, and this tends to result in the reverse order of memory
    addresses when large space is available at boot, as the kernel takes a
    free page from the top to the bottom in the zone.  The end result
    looks as if non-contiguous (although it actually is).  What's worse is
    that it leads to an overflow of BDL entries for HD-audio.
    
    For avoiding such a problem, this patch modifies the allocation code
    slightly; now it tries to allocate the larger contiguous chunks as
    much as possible, then reduces to the smaller chunks only if the
    allocation failed -- a similar strategy as the existing
    snd_dma_alloc_pages_fallback() function.
    
    Along with the trick, drop the unused address array from
    snd_dma_sg_fallback object.  It was needed in the past when
    dma_alloc_coherent() was used, but with the standard page allocator,
    it became superfluous and never referred.
    
    Fixes: a8d302a0 ("ALSA: memalloc: Revive x86-specific WC page allocations again")
    Reviewed-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
    Link: https://lore.kernel.org/r/20221114141658.29620-1-tiwai@suse.deSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    cc265163
memalloc.c 23.4 KB