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.
63 lines
2.0 KiB
Diff
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);
|