summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com>2023-12-31 18:27:26 -0800
committerSecurityBot <android-nexus-securitybot@system.gserviceaccount.com>2023-12-31 18:27:26 -0800
commit3f52eff0bec3116236b26feee0fe4ff255d652a1 (patch)
treeecead8c9331aed9475c9d0f767355a7a2518204a
parent348e210e6ee3618f4dce426471d976cc1fa443a2 (diff)
parent93d079a8d23f98fe676dbc50a130ce8fb434f8fa (diff)
downloadlwis-3f52eff0bec3116236b26feee0fe4ff255d652a1.tar.gz
Merge android13-gs-pixel-5.10-24Q2 into android13-gs-pixel-5.10
SBMerger: 571992243 Change-Id: Ia9a3fc4b950d9844d16c2c2bbedf37bba914e126 Signed-off-by: SecurityBot <android-nexus-securitybot@system.gserviceaccount.com>
-rw-r--r--lwis_debug.c11
-rw-r--r--lwis_device.c1
-rw-r--r--lwis_device.h2
3 files changed, 12 insertions, 2 deletions
diff --git a/lwis_debug.c b/lwis_debug.c
index f3f9501..59d83de 100644
--- a/lwis_debug.c
+++ b/lwis_debug.c
@@ -160,6 +160,13 @@ static void list_enrolled_buffers(struct lwis_client *client, char *k_buf, size_
hash_for_each (client->enrolled_buffers, i, enrollment_list, node) {
list_for_each (it_enrollment, &enrollment_list->list) {
buffer = list_entry(it_enrollment, struct lwis_enrolled_buffer, list_node);
+ if (IS_ERR_VALUE(buffer->info.dma_vaddr)) {
+ scnprintf(tmp_buf, sizeof(tmp_buf),
+ "Enrolled buffers: dma_vaddr %pad is invalid\n",
+ &buffer->info.dma_vaddr);
+ strlcat(k_buf, tmp_buf, k_buf_size);
+ continue;
+ }
end_dma_vaddr = buffer->info.dma_vaddr + (buffer->dma_buf->size - 1);
scnprintf(tmp_buf, sizeof(tmp_buf),
"[%2d] FD: %d Mode: %s%s Addr:[%pad ~ %pad] Size: %zu\n", idx++,
@@ -296,15 +303,15 @@ static int generate_buffer_info(struct lwis_device *lwis_dev, char *buffer, size
return 0;
}
- spin_lock_irqsave(&lwis_dev->lock, flags);
list_for_each_entry (client, &lwis_dev->clients, node) {
scnprintf(tmp_buf, sizeof(tmp_buf), "Client %d:\n", idx);
strlcat(buffer, tmp_buf, buffer_size);
+ spin_lock_irqsave(&client->buffer_lock, flags);
list_allocated_buffers(client, buffer, buffer_size);
list_enrolled_buffers(client, buffer, buffer_size);
+ spin_unlock_irqrestore(&client->buffer_lock, flags);
idx++;
}
- spin_unlock_irqrestore(&lwis_dev->lock, flags);
return 0;
}
diff --git a/lwis_device.c b/lwis_device.c
index 6017095..309584d 100644
--- a/lwis_device.c
+++ b/lwis_device.c
@@ -123,6 +123,7 @@ static int lwis_open(struct inode *node, struct file *fp)
spin_lock_init(&lwis_client->periodic_io_lock);
spin_lock_init(&lwis_client->event_lock);
spin_lock_init(&lwis_client->flush_lock);
+ spin_lock_init(&lwis_client->buffer_lock);
/* Empty hash table for client event states */
hash_init(lwis_client->event_states);
diff --git a/lwis_device.h b/lwis_device.h
index 1313587..c70b98d 100644
--- a/lwis_device.h
+++ b/lwis_device.h
@@ -366,6 +366,8 @@ struct lwis_client {
enum lwis_client_flush_state flush_state;
/* Lock to guard client's flush state changes */
spinlock_t flush_lock;
+ /* Lock to guard client's buffer changes */
+ spinlock_t buffer_lock;
};
/*