diff options
author | Robin <robinpeng@google.com> | 2022-04-06 11:30:02 +0800 |
---|---|---|
committer | Robin <robinpeng@google.com> | 2022-04-06 11:30:02 +0800 |
commit | b2fc92190ed2af85b5a256ba8669db175bedbe78 (patch) | |
tree | e7ef53cb3d033b828c884b88cd266f3516e66a7c | |
parent | 7213c3a53b5643bfa5d3daefc9a7dc2350367455 (diff) | |
parent | 64099431c232d4a95f621411747a3972cc1c8061 (diff) | |
download | gs-android-gs-raviole-5.10-s-qpr3-beta-3.tar.gz |
Merge android12-5.10-2022-03_r2 into android12-gs-pixel-5.10-sc-qpr3android-s-qpr3-beta-3_r0.5android-12.1.0_r0.28android-gs-raviole-5.10-s-qpr3-beta-3
Merge SHA
6409943 Revert "ANDROID: dm-bow: Protect Ranges fetched and erased from the RB tree"
Bug: 215048134
Signed-off-by: Robin Peng <robinpeng@google.com>
Change-Id: Ib85e2275f046c83a5c69d98b301454c7f7251b71
-rw-r--r-- | drivers/iommu/iova.c | 5 | ||||
-rw-r--r-- | drivers/md/dm-bow.c | 17 |
2 files changed, 7 insertions, 15 deletions
diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c index 2adc7882a023..cf32b592a6d5 100644 --- a/drivers/iommu/iova.c +++ b/drivers/iommu/iova.c @@ -140,10 +140,11 @@ __cached_rbnode_delete_update(struct iova_domain *iovad, struct iova *free) cached_iova = rb_entry(iovad->cached32_node, struct iova, node); if (free == cached_iova || (free->pfn_hi < iovad->dma_32bit_pfn && - free->pfn_lo >= cached_iova->pfn_lo)) { + free->pfn_lo >= cached_iova->pfn_lo)) iovad->cached32_node = rb_next(&free->node); + + if (free->pfn_lo < iovad->dma_32bit_pfn) iovad->max32_alloc_size = iovad->dma_32bit_pfn; - } cached_iova = rb_entry(iovad->cached_node, struct iova, node); if (free->pfn_lo >= cached_iova->pfn_lo) diff --git a/drivers/md/dm-bow.c b/drivers/md/dm-bow.c index e666ca01d220..cfd1fa63ff97 100644 --- a/drivers/md/dm-bow.c +++ b/drivers/md/dm-bow.c @@ -236,7 +236,6 @@ static void set_type(struct bow_context *bc, struct bow_range **br, int type) (*br)->type = type; - mutex_lock(&bc->ranges_lock); if (next->type == type) { if (type == TRIMMED) list_del(&next->trimmed_list); @@ -250,7 +249,6 @@ static void set_type(struct bow_context *bc, struct bow_range **br, int type) rb_erase(&(*br)->node, &bc->ranges); kfree(*br); } - mutex_unlock(&bc->ranges_lock); *br = NULL; } @@ -601,7 +599,6 @@ static void dm_bow_dtr(struct dm_target *ti) struct bow_context *bc = (struct bow_context *) ti->private; struct kobject *kobj; - mutex_lock(&bc->ranges_lock); while (rb_first(&bc->ranges)) { struct bow_range *br = container_of(rb_first(&bc->ranges), struct bow_range, node); @@ -609,8 +606,6 @@ static void dm_bow_dtr(struct dm_target *ti) rb_erase(&br->node, &bc->ranges); kfree(br); } - mutex_unlock(&bc->ranges_lock); - if (bc->workqueue) destroy_workqueue(bc->workqueue); if (bc->bufio) @@ -1186,7 +1181,6 @@ static void dm_bow_tablestatus(struct dm_target *ti, char *result, return; } - mutex_lock(&bc->ranges_lock); for (i = rb_first(&bc->ranges); i; i = rb_next(i)) { struct bow_range *br = container_of(i, struct bow_range, node); @@ -1194,11 +1188,11 @@ static void dm_bow_tablestatus(struct dm_target *ti, char *result, readable_type[br->type], (unsigned long long)br->sector); if (result >= end) - goto unlock; + return; result += scnprintf(result, end - result, "\n"); if (result >= end) - goto unlock; + return; if (br->type == TRIMMED) ++trimmed_range_count; @@ -1220,22 +1214,19 @@ static void dm_bow_tablestatus(struct dm_target *ti, char *result, if (!rb_next(i)) { scnprintf(result, end - result, "\nERROR: Last range not of type TOP"); - goto unlock; + return; } if (br->sector > range_top(br)) { scnprintf(result, end - result, "\nERROR: sectors out of order"); - goto unlock; + return; } } if (trimmed_range_count != trimmed_list_length) scnprintf(result, end - result, "\nERROR: not all trimmed ranges in trimmed list"); - -unlock: - mutex_unlock(&bc->ranges_lock); } static void dm_bow_status(struct dm_target *ti, status_type_t type, |