• Raja Mani's avatar
    ath10k: fix memory alloc failure in qca99x0 during wmi svc rdy event · c8ecfc1c
    Raja Mani authored
    Host memory required for firmware is allocated while handling
    wmi service ready event. Right now, wmi service ready is handled
    in tasklet context and it calls dma_alloc_coherent() with atomic
    flag (GFP_ATOMIC) to allocate memory in host needed for firmware.
    The problem is, dma_alloc_coherent() with GFP_ATOMIC fails in
    the platform (at least in AP platform) where it has less atomic
    pool memory (< 2mb). QCA99X0 requires around 2 MB of host memory
    for one card, having additional QCA99X0 card in the same platform
    will require similarly amount of memory. So, it's not guaranteed that
    all the platform will have enough atomic memory pool.
    
    Fix this issue, by handling wmi service ready event in workqueue
    context and calling dma_alloc_coherent() with GFP_KERNEL. mac80211 work
    queue will not be ready at the time of handling wmi service ready.
    So, it can't be used to handle wmi service ready. Also, register work
    gets scheduled during insmod in existing ath10k_wq and waits for
    wmi service ready to completed. Both workqueue can't be used for
    this purpose. New auxiliary workqueue is added to handle wmi service
    ready.
    Signed-off-by: default avatarRaja Mani <rmani@qti.qualcomm.com>
    Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
    c8ecfc1c
core.h 18.5 KB