Merge "video: driver: modify unmap excess mappings"

This commit is contained in:
qctecmdr
2021-05-17 21:49:01 -07:00
committed by Gerrit - the friendly Code Review server
melakukan 0287f0d1f4

Melihat File

@@ -1851,6 +1851,33 @@ int msm_vdec_handle_release_buffer(struct msm_vidc_inst *inst,
return rc;
}
static bool is_valid_removable_buffer(struct msm_vidc_inst *inst,
struct msm_vidc_map *map)
{
bool found = false;
struct msm_vidc_buffer *ro_buf;
if (!inst || !map) {
d_vpr_e("%s: invalid params\n", __func__);
return -EINVAL;
}
if (map->refcount != 1)
return false;
list_for_each_entry(ro_buf, &inst->buffers.read_only.list, list) {
if (map->device_addr == ro_buf->device_addr) {
found = true;
break;
}
}
if (!found)
return true;
return false;
}
static int msm_vidc_unmap_excessive_mappings(struct msm_vidc_inst *inst)
{
int rc = 0;
@@ -1863,12 +1890,13 @@ static int msm_vidc_unmap_excessive_mappings(struct msm_vidc_inst *inst)
}
/*
* count entries from map list whose refcount is 1
* count entries from map list which are not present in
* read_only buffers list and whose refcount is 1.
* these are excess mappings present due to delayed
* unmap feature.
*/
list_for_each_entry(map, &inst->mappings.output.list, list) {
if (map->refcount == 1)
if (is_valid_removable_buffer(inst, map))
refcount_one_bufs_count++;
}
@@ -1877,7 +1905,7 @@ static int msm_vidc_unmap_excessive_mappings(struct msm_vidc_inst *inst)
/* unmap these buffers as they are stale entries */
list_for_each_entry(map, &inst->mappings.output.list, list) {
if (map->refcount == 1) {
if (is_valid_removable_buffer(inst, map)) {
d_vpr_h(
"%s: type %11s, device_addr %#x, refcount %d, region %d\n",
__func__, buf_name(map->type), map->device_addr, map->refcount,