You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
openwrt/target/linux/brcm2708/patches-4.19/950-0490-staging-vchiq-mmal...

63 lines
2.0 KiB
Diff

From d9725f9881c55fdb8727301e45ce6b200c1d7633 Mon Sep 17 00:00:00 2001
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
Date: Fri, 3 May 2019 13:27:51 +0100
Subject: [PATCH 490/725] staging: vchiq-mmal: Fix memory leak of vchiq
instance
The vchiq instance was allocated from vchiq_mmal_init via
vchi_initialise, but was never released with vchi_disconnect.
Retain the handle and release it from vchiq_mmal_finalise.
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
---
drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -176,6 +176,7 @@ struct mmal_msg_context {
};
struct vchiq_mmal_instance {
+ VCHI_INSTANCE_T vchi_instance;
VCHI_SERVICE_HANDLE_T handle;
/* ensure serialised access to service */
@@ -1981,7 +1982,7 @@ EXPORT_SYMBOL_GPL(vchiq_mmal_component_i
int vchiq_mmal_component_finalise(struct vchiq_mmal_instance *instance,
struct vchiq_mmal_component *component)
{
- int ret, idx;
+ int ret;
if (mutex_lock_interruptible(&instance->vchiq_mutex))
return -EINTR;
@@ -2094,6 +2095,8 @@ int vchiq_mmal_finalise(struct vchiq_mma
idr_destroy(&instance->context_map);
+ vchi_disconnect(instance->vchi_instance);
+
kfree(instance);
return status;
@@ -2105,7 +2108,7 @@ int vchiq_mmal_init(struct vchiq_mmal_in
int status;
struct vchiq_mmal_instance *instance;
static VCHI_CONNECTION_T *vchi_connection;
- static VCHI_INSTANCE_T vchi_instance;
+ VCHI_INSTANCE_T vchi_instance;
SERVICE_CREATION_T params = {
.version = VCHI_VERSION_EX(VC_MMAL_VER, VC_MMAL_MIN_VER),
.service_id = VC_MMAL_SERVER_NAME,
@@ -2151,6 +2154,8 @@ int vchiq_mmal_init(struct vchiq_mmal_in
if (!instance)
return -ENOMEM;
+ instance->vchi_instance = vchi_instance;
+
mutex_init(&instance->vchiq_mutex);
instance->bulk_scratch = vmalloc(PAGE_SIZE);