diff options
Diffstat (limited to 'drivers/net/wireless/ath/wcn36xx/smd.c')
-rw-r--r-- | drivers/net/wireless/ath/wcn36xx/smd.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/drivers/net/wireless/ath/wcn36xx/smd.c b/drivers/net/wireless/ath/wcn36xx/smd.c index 8f37562e0b11..750626b0e22d 100644 --- a/drivers/net/wireless/ath/wcn36xx/smd.c +++ b/drivers/net/wireless/ath/wcn36xx/smd.c | |||
@@ -2060,22 +2060,28 @@ static void wcn36xx_smd_rsp_process(struct wcn36xx *wcn, void *buf, size_t len) | |||
2060 | case WCN36XX_HAL_OTA_TX_COMPL_IND: | 2060 | case WCN36XX_HAL_OTA_TX_COMPL_IND: |
2061 | case WCN36XX_HAL_MISSED_BEACON_IND: | 2061 | case WCN36XX_HAL_MISSED_BEACON_IND: |
2062 | case WCN36XX_HAL_DELETE_STA_CONTEXT_IND: | 2062 | case WCN36XX_HAL_DELETE_STA_CONTEXT_IND: |
2063 | mutex_lock(&wcn->hal_ind_mutex); | ||
2064 | msg_ind = kmalloc(sizeof(*msg_ind), GFP_KERNEL); | 2063 | msg_ind = kmalloc(sizeof(*msg_ind), GFP_KERNEL); |
2065 | if (msg_ind) { | 2064 | if (!msg_ind) |
2066 | msg_ind->msg_len = len; | 2065 | goto nomem; |
2067 | msg_ind->msg = kmalloc(len, GFP_KERNEL); | 2066 | msg_ind->msg_len = len; |
2068 | memcpy(msg_ind->msg, buf, len); | 2067 | msg_ind->msg = kmalloc(len, GFP_KERNEL); |
2069 | list_add_tail(&msg_ind->list, &wcn->hal_ind_queue); | 2068 | if (!msg_ind->msg) { |
2070 | queue_work(wcn->hal_ind_wq, &wcn->hal_ind_work); | 2069 | kfree(msg_ind); |
2071 | wcn36xx_dbg(WCN36XX_DBG_HAL, "indication arrived\n"); | 2070 | nomem: |
2071 | /* | ||
2072 | * FIXME: Do something smarter then just | ||
2073 | * printing an error. | ||
2074 | */ | ||
2075 | wcn36xx_err("Run out of memory while handling SMD_EVENT (%d)\n", | ||
2076 | msg_header->msg_type); | ||
2077 | break; | ||
2072 | } | 2078 | } |
2079 | memcpy(msg_ind->msg, buf, len); | ||
2080 | mutex_lock(&wcn->hal_ind_mutex); | ||
2081 | list_add_tail(&msg_ind->list, &wcn->hal_ind_queue); | ||
2082 | queue_work(wcn->hal_ind_wq, &wcn->hal_ind_work); | ||
2073 | mutex_unlock(&wcn->hal_ind_mutex); | 2083 | mutex_unlock(&wcn->hal_ind_mutex); |
2074 | if (msg_ind) | 2084 | wcn36xx_dbg(WCN36XX_DBG_HAL, "indication arrived\n"); |
2075 | break; | ||
2076 | /* FIXME: Do something smarter then just printing an error. */ | ||
2077 | wcn36xx_err("Run out of memory while handling SMD_EVENT (%d)\n", | ||
2078 | msg_header->msg_type); | ||
2079 | break; | 2085 | break; |
2080 | default: | 2086 | default: |
2081 | wcn36xx_err("SMD_EVENT (%d) not supported\n", | 2087 | wcn36xx_err("SMD_EVENT (%d) not supported\n", |