Эх сурвалжийг харах

qcacmn: Unmapped IPA buffer results in smmu fault

Check the return status of the IPA api that creates or
releases the smmu mappings of the tx/rx buffers. If the
api returns a failure then assert.

Change-Id: I755765c7c35c901341279eefbc8087d0dce0494c
CRs-Fixed: 2898353
Nisha Menon 4 жил өмнө
parent
commit
ab30ba1267

+ 12 - 9
dp/wifi3.0/dp_ipa.c

@@ -100,15 +100,18 @@ static QDF_STATUS __dp_ipa_handle_buf_smmu_mapping(struct dp_soc *soc,
 						   bool create)
 						   bool create)
 {
 {
 	qdf_mem_info_t mem_map_table = {0};
 	qdf_mem_info_t mem_map_table = {0};
+	QDF_STATUS ret = QDF_STATUS_SUCCESS;
 
 
 	qdf_update_mem_map_table(soc->osdev, &mem_map_table,
 	qdf_update_mem_map_table(soc->osdev, &mem_map_table,
 				 qdf_nbuf_get_frag_paddr(nbuf, 0),
 				 qdf_nbuf_get_frag_paddr(nbuf, 0),
 				 size);
 				 size);
 
 
 	if (create)
 	if (create)
-		return qdf_ipa_wdi_create_smmu_mapping(1, &mem_map_table);
+		ret = qdf_ipa_wdi_create_smmu_mapping(1, &mem_map_table);
 	else
 	else
-		return qdf_ipa_wdi_release_smmu_mapping(1, &mem_map_table);
+		ret = qdf_ipa_wdi_release_smmu_mapping(1, &mem_map_table);
+	qdf_assert_always(!ret);
+	return ret;
 }
 }
 
 
 QDF_STATUS dp_ipa_handle_rx_buf_smmu_mapping(struct dp_soc *soc,
 QDF_STATUS dp_ipa_handle_rx_buf_smmu_mapping(struct dp_soc *soc,
@@ -178,9 +181,8 @@ static QDF_STATUS __dp_ipa_tx_buf_smmu_mapping(
 		if (!nbuf)
 		if (!nbuf)
 			continue;
 			continue;
 		buf_len = qdf_nbuf_get_data_len(nbuf);
 		buf_len = qdf_nbuf_get_data_len(nbuf);
-		ret = __dp_ipa_handle_buf_smmu_mapping(
+		return __dp_ipa_handle_buf_smmu_mapping(
 				soc, nbuf, buf_len, create);
 				soc, nbuf, buf_len, create);
-		qdf_assert_always(!ret);
 	}
 	}
 
 
 	return ret;
 	return ret;
@@ -198,12 +200,13 @@ static QDF_STATUS dp_ipa_handle_rx_buf_pool_smmu_mapping(struct dp_soc *soc,
 	union dp_rx_desc_list_elem_t *rx_desc_elem;
 	union dp_rx_desc_list_elem_t *rx_desc_elem;
 	struct dp_rx_desc *rx_desc;
 	struct dp_rx_desc *rx_desc;
 	qdf_nbuf_t nbuf;
 	qdf_nbuf_t nbuf;
+	QDF_STATUS ret = QDF_STATUS_SUCCESS;
 
 
 	if (!qdf_ipa_is_ready())
 	if (!qdf_ipa_is_ready())
-		return QDF_STATUS_SUCCESS;
+		return ret;
 
 
 	if (!qdf_mem_smmu_s1_enabled(soc->osdev))
 	if (!qdf_mem_smmu_s1_enabled(soc->osdev))
-		return QDF_STATUS_SUCCESS;
+		return ret;
 
 
 	pdev_id = pdev->pdev_id;
 	pdev_id = pdev->pdev_id;
 	rx_pool = &soc->rx_desc_buf[pdev_id];
 	rx_pool = &soc->rx_desc_buf[pdev_id];
@@ -235,12 +238,12 @@ static QDF_STATUS dp_ipa_handle_rx_buf_pool_smmu_mapping(struct dp_soc *soc,
 		}
 		}
 		qdf_nbuf_set_rx_ipa_smmu_map(nbuf, create);
 		qdf_nbuf_set_rx_ipa_smmu_map(nbuf, create);
 
 
-		__dp_ipa_handle_buf_smmu_mapping(soc, nbuf,
-						 rx_pool->buf_size, create);
+		ret = __dp_ipa_handle_buf_smmu_mapping(
+				soc, nbuf, rx_pool->buf_size, create);
 	}
 	}
 	qdf_spin_unlock_bh(&rx_pool->lock);
 	qdf_spin_unlock_bh(&rx_pool->lock);
 
 
-	return QDF_STATUS_SUCCESS;
+	return ret;
 }
 }
 #else
 #else
 static QDF_STATUS dp_ipa_handle_rx_buf_pool_smmu_mapping(struct dp_soc *soc,
 static QDF_STATUS dp_ipa_handle_rx_buf_pool_smmu_mapping(struct dp_soc *soc,