Bläddra i källkod

qcacmn: Untrack nbuf map on map failure

Currently, nbuf map tracking happens before the nbuf is actually mapped.
In cases where the actual map operation fails, remove the nbuf map
tracking information to avoid false positive mapped-never-unmapped
panics.

Change-Id: I8e649841a661d460bf89dd5edf09bb5e460ea98c
CRs-Fixed: 2171837
Dustin Brown 7 år sedan
förälder
incheckning
dbc7ec1702
1 ändrade filer med 20 tillägg och 4 borttagningar
  1. 20 4
      qdf/linux/src/qdf_nbuf.c

+ 20 - 4
qdf/linux/src/qdf_nbuf.c

@@ -658,7 +658,11 @@ QDF_STATUS qdf_nbuf_map_debug(qdf_device_t osdev,
 	if (QDF_IS_STATUS_ERROR(status))
 		return status;
 
-	return __qdf_nbuf_map(osdev, buf, dir);
+	status = __qdf_nbuf_map(osdev, buf, dir);
+	if (QDF_IS_STATUS_ERROR(status))
+		qdf_nbuf_untrack_map(buf, file, line);
+
+	return status;
 }
 
 void qdf_nbuf_unmap_debug(qdf_device_t osdev,
@@ -683,7 +687,11 @@ QDF_STATUS qdf_nbuf_map_single_debug(qdf_device_t osdev,
 	if (QDF_IS_STATUS_ERROR(status))
 		return status;
 
-	return __qdf_nbuf_map_single(osdev, buf, dir);
+	status = __qdf_nbuf_map_single(osdev, buf, dir);
+	if (QDF_IS_STATUS_ERROR(status))
+		qdf_nbuf_untrack_map(buf, file, line);
+
+	return status;
 }
 
 void qdf_nbuf_unmap_single_debug(qdf_device_t osdev,
@@ -709,7 +717,11 @@ QDF_STATUS qdf_nbuf_map_nbytes_debug(qdf_device_t osdev,
 	if (QDF_IS_STATUS_ERROR(status))
 		return status;
 
-	return __qdf_nbuf_map_nbytes(osdev, buf, dir, nbytes);
+	status = __qdf_nbuf_map_nbytes(osdev, buf, dir, nbytes);
+	if (QDF_IS_STATUS_ERROR(status))
+		qdf_nbuf_untrack_map(buf, file, line);
+
+	return status;
 }
 
 void qdf_nbuf_unmap_nbytes_debug(qdf_device_t osdev,
@@ -736,7 +748,11 @@ QDF_STATUS qdf_nbuf_map_nbytes_single_debug(qdf_device_t osdev,
 	if (QDF_IS_STATUS_ERROR(status))
 		return status;
 
-	return __qdf_nbuf_map_nbytes_single(osdev, buf, dir, nbytes);
+	status = __qdf_nbuf_map_nbytes_single(osdev, buf, dir, nbytes);
+	if (QDF_IS_STATUS_ERROR(status))
+		qdf_nbuf_untrack_map(buf, file, line);
+
+	return status;
 }
 
 void qdf_nbuf_unmap_nbytes_single_debug(qdf_device_t osdev,