diff options
author | PixelBot AutoMerger <android-nexus-securitybot@system.gserviceaccount.com> | 2023-12-31 18:27:26 -0800 |
---|---|---|
committer | SecurityBot <android-nexus-securitybot@system.gserviceaccount.com> | 2023-12-31 18:27:26 -0800 |
commit | 3f52eff0bec3116236b26feee0fe4ff255d652a1 (patch) | |
tree | ecead8c9331aed9475c9d0f767355a7a2518204a | |
parent | 348e210e6ee3618f4dce426471d976cc1fa443a2 (diff) | |
parent | 93d079a8d23f98fe676dbc50a130ce8fb434f8fa (diff) | |
download | lwis-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.c | 11 | ||||
-rw-r--r-- | lwis_device.c | 1 | ||||
-rw-r--r-- | lwis_device.h | 2 |
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; }; /* |