From: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
To: bcm-kernel-feedback-list@broadcom.com,
linux-rpi-kernel@lists.infradead.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: kernel-list@raspberrypi.com, laurent.pinchart@ideasonboard.com,
gregkh@linuxfoundation.org,
Nicolas Saenz Julienne <nsaenzjulienne@suse.de>,
devel@driverdev.osuosl.org
Subject: [RFC 18/50] staging: vc04_services: vc-sm-cma: Get rid of the multiple connections option
Date: Wed, 27 May 2020 13:53:23 +0200 [thread overview]
Message-ID: <20200527115400.31391-19-nsaenzjulienne@suse.de> (raw)
In-Reply-To: <20200527115400.31391-1-nsaenzjulienne@suse.de>
Multiple connections are not handled by the IO thread, so it's not
really necessary to handle them on initialization.
Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
.../staging/vc04_services/vc-sm-cma/vc_sm.c | 3 +-
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.c | 67 ++++++-------------
.../vc04_services/vc-sm-cma/vc_sm_cma_vchi.h | 1 -
3 files changed, 23 insertions(+), 48 deletions(-)
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
index 3f95ea90c08a..e660f546a7e4 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm.c
@@ -1532,8 +1532,7 @@ static void vc_sm_connected_init(void)
}
/* Initialize an instance of the shared memory service. */
- sm_state->sm_handle = vc_sm_cma_vchi_init(instance, 1,
- vc_sm_vpu_event);
+ sm_state->sm_handle = vc_sm_cma_vchi_init(instance, vc_sm_vpu_event);
if (!sm_state->sm_handle) {
pr_err("[%s]: failed to initialize shared memory service\n",
__func__);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
index 32706eb2838b..72b09685db31 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.c
@@ -46,8 +46,7 @@ struct sm_cmd_rsp_blk {
};
struct sm_instance {
- u32 num_connections;
- struct vchi_service *service[VCHI_MAX_NUM_CONNECTIONS];
+ struct vchi_service *service;
struct task_struct *io_thread;
struct completion io_cmplt;
@@ -187,13 +186,13 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
while (1) {
if (svc_use)
- vchi_service_release(instance->service[0]);
+ vchi_service_release(instance->service);
svc_use = 0;
if (wait_for_completion_interruptible(&instance->io_cmplt))
continue;
- vchi_service_use(instance->service[0]);
+ vchi_service_use(instance->service);
svc_use = 1;
do {
@@ -214,7 +213,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
/* Send the command */
status =
- bcm2835_vchi_msg_queue(instance->service[0],
+ bcm2835_vchi_msg_queue(instance->service,
cmd->msg, cmd->length);
if (status) {
pr_err("%s: failed to queue message (%d)",
@@ -237,7 +236,7 @@ static int vc_sm_cma_vchi_videocore_io(void *arg)
} while (1);
- while (!vchi_msg_hold(instance->service[0], (void **)&reply,
+ while (!vchi_msg_hold(instance->service, (void **)&reply,
&reply_len, VCHI_FLAGS_NONE, &msg)) {
if (reply->trans_id & 0x80000000) {
/* Async event or cmd from the VPU */
@@ -286,21 +285,20 @@ static void vc_sm_cma_vchi_callback(void *param,
}
struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
- unsigned int num_connections,
vpu_event_cb vpu_event)
{
- u32 i;
+ struct service_creation params = {
+ .version = VCHI_VERSION_EX(VC_SM_VER, VC_SM_MIN_VER),
+ .service_id = VC_SM_SERVER_NAME,
+ .callback = vc_sm_cma_vchi_callback,
+ .callback_param = NULL,
+ };
struct sm_instance *instance;
int status;
+ int i;
pr_debug("%s: start", __func__);
- if (num_connections > VCHI_MAX_NUM_CONNECTIONS) {
- pr_err("%s: unsupported number of connections %u (max=%u)",
- __func__, num_connections, VCHI_MAX_NUM_CONNECTIONS);
-
- goto err_null;
- }
/* Allocate memory for this instance */
instance = kzalloc(sizeof(*instance), GFP_KERNEL);
@@ -317,25 +315,15 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
init_completion(&instance->free_blk[i].cmplt);
list_add(&instance->free_blk[i].head, &instance->free_list);
}
+ params.callback_param = instance;
/* Open the VCHI service connections */
- instance->num_connections = num_connections;
- for (i = 0; i < num_connections; i++) {
- struct service_creation params = {
- .version = VCHI_VERSION_EX(VC_SM_VER, VC_SM_MIN_VER),
- .service_id = VC_SM_SERVER_NAME,
- .callback = vc_sm_cma_vchi_callback,
- .callback_param = instance,
- };
-
- status = vchi_service_open(vchiq_instance,
- ¶ms, &instance->service[i]);
- if (status) {
- pr_err("%s: failed to open VCHI service (%d)",
- __func__, status);
-
- goto err_close_services;
- }
+ status = vchi_service_open(vchiq_instance, ¶ms, &instance->service);
+ if (status) {
+ pr_err("%s: failed to open VCHI service (%d)",
+ __func__, status);
+
+ goto err_close_services;
}
/* Create the thread which takes care of all io to/from videoocore. */
@@ -354,12 +342,8 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
return instance;
err_close_services:
- for (i = 0; i < instance->num_connections; i++) {
- if (instance->service[i])
- vchi_service_close(instance->service[i]);
- }
+ vchi_service_close(instance->service);
kfree(instance);
-err_null:
pr_debug("%s: FAILED", __func__);
return NULL;
}
@@ -367,7 +351,6 @@ struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
int vc_sm_cma_vchi_stop(struct sm_instance **handle)
{
struct sm_instance *instance;
- u32 i;
if (!handle) {
pr_err("%s: invalid pointer to handle %p", __func__, handle);
@@ -381,14 +364,8 @@ int vc_sm_cma_vchi_stop(struct sm_instance **handle)
instance = *handle;
- /* Close all VCHI service connections */
- for (i = 0; i < instance->num_connections; i++) {
- s32 success;
-
- vchi_service_use(instance->service[i]);
-
- success = vchi_service_close(instance->service[i]);
- }
+ vchi_service_use(instance->service);
+ vchi_service_close(instance->service);
kfree(instance);
diff --git a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h
index 44cc389364f4..09ef0fc59566 100644
--- a/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h
+++ b/drivers/staging/vc04_services/vc-sm-cma/vc_sm_cma_vchi.h
@@ -29,7 +29,6 @@ typedef void (*vpu_event_cb)(struct sm_instance *instance,
* Initialize the shared memory service, opens up vchi connection to talk to it.
*/
struct sm_instance *vc_sm_cma_vchi_init(struct vchiq_instance *vchiq_instance,
- unsigned int num_connections,
vpu_event_cb vpu_event);
/*
--
2.26.2
next prev parent reply other threads:[~2020-05-27 11:57 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-27 11:53 [RFC 00/50] staging: vchiq: Getting rid of the vchi/vchiq split Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 01/50] staging: vchi: Get rid of vchi_service_destroy() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 02/50] staging: vchi: Get rid of vchi_queue_user_message() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 03/50] staging: vchiq: Move copy callback handling into vchiq Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 04/50] staging: vchi: Merge vchi_msg_queue() into vchi_queue_kernel_message() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 05/50] staging: vchi: Get rid of vchi_service_set_option() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 06/50] staging: vchi: Get rid of vchiq_status_to_vchi() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 07/50] staging: vchi: Get rid of not implemented function declarations Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 08/50] staging: vchi: Get rid of C++ guards Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 09/50] staging: vchiq: move vchiq_release_message() into vchiq Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 10/50] staging: vchiq: Get rid of VCHIQ_SERVICE_OPENEND callback reason Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 11/50] staging: vchi: Get rid of all useless callback reasons Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 12/50] staging: vchi: Get rid of vchi_msg_peek() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 13/50] staging: vchi: Get rid of struct vchi_instance_handle Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 14/50] staging: vchi: Unify struct shim_service and struct vchi_service_handle Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 15/50] staging: vc04_services: bcm2835-audio: Use vchi_msg_hold() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 16/50] staging: vchi: Get rid of vchi_msg_dequeue() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 17/50] staging: vchi_common: Get rid of all unused definitions Nicolas Saenz Julienne
2020-05-27 11:53 ` Nicolas Saenz Julienne [this message]
2020-05-27 11:53 ` [RFC 19/50] staging: vchi: Get rid of unnecessary defines Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 20/50] staging: vc04_services: Get rid of vchi_cfg.h Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 21/50] staging: vchi: Get rid of flags argument in vchi_msg_hold() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 22/50] staging: vchi: Use enum vchiq_bulk_mode instead of vchi's transmission flags Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 23/50] staging: vchi: Use vchiq's enum vchiq_reason Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 24/50] staging: vchi: Get rid of effect less expression Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 25/50] staging: vchiq: Introduce vchiq_validate_params() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 26/50] staging: vchiq: Move message queue into struct vchiq_service Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 27/50] staging: vchiq: Get rid of vchiq_util.h Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 28/50] staging: vchi: Expose struct vchi_service Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 29/50] staging: vchiq: Export vchiq_get_service_userdata() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 30/50] staging: vchiq: Export vchiq_msg_queue_push Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 31/50] staging: vchi: Get rid of vchiq_shim's message callback Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 32/50] staging: vchiq: Don't use a typedef for vchiq_callback Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 33/50] staging: vchi: Use struct vchiq_service_params Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 34/50] staging: vchi: Get rid of struct vchi_service Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 35/50] staging: vchiq: Pass vchiq's message when holding a message Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 36/50] staging: vchi: Rework vchi_msg_hold() to match vchiq_msg_hold() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 37/50] staging: vchiq: Unify fourcc definition mechanisms Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 38/50] staging: vchi: Get rid of struct vchiq_instance forward declaration Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 39/50] staging: vchi: Don't include vchiq_core.h Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 40/50] staging: vchiq: Get rid of unnecessary definitions in vchiq_if.h Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 41/50] staging: vchiq: Make vchiq_add_service() local Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 42/50] staging: vchiq: Move definitions only used by core into core header Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 43/50] staging: vchi: Get rid of vchi_bulk_queue_receive() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 44/50] staging: vchi: Get rid of vchi_bulk_queue_transmit() Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 45/50] staging: vchi: Move vchi_queue_kernel_message() into vchiq Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 46/50] staging: vchiq: Get rid of vchi Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 47/50] staging: vchiq: Move conditional barrier definition into vchiq_core.h Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 48/50] staging: vchiq: Use vchiq.h as the main header file for services Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 49/50] staging: vchiq: Move defines into core header Nicolas Saenz Julienne
2020-05-27 11:53 ` [RFC 50/50] staging: vchiq: Move vchiq.h into include directory Nicolas Saenz Julienne
2020-05-27 12:08 ` [RFC 00/50] staging: vchiq: Getting rid of the vchi/vchiq split Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200527115400.31391-19-nsaenzjulienne@suse.de \
--to=nsaenzjulienne@suse.de \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@linuxfoundation.org \
--cc=kernel-list@raspberrypi.com \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rpi-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).