• Takashi Iwai's avatar
    ALSA: Allocate larger pages in sgbuf · 51e9f2e6
    Takashi Iwai authored
    Most hardwares have limited buffer-descriptor table length.  This
    also restricts the max buffer size of the sound driver.
    For example, snd-hda-intel has 1MB buffer size limit, and this is
    because it can have at most 256 BDL entries.  For supporting larger
    buffers, we need to allocate larger pages even for sg-buffers.
    
    This patch changes the sgbuf allocation code to try to allocate
    larger pages first.  At each head of the allocated pages, the
    number of allocated pages is stored in the lowest bits of the
    corresponding entry of the table addr field.  This change isn't
    visible as long as the driver uses snd_sgbuf_get_addr() helper.
    
    Also, the patch adds a new function, snd_pcm_sgbuf_get_chunk_size().
    This returns the size of the chunk on continuous pages starting at
    the given position offset.  If the chunk reaches to a non-continuous
    page, it returns the size to the boundary.
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
    51e9f2e6
sgbuf.c 3.54 KB