mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
staging: vchiq_arm: pass vchiq instance to 'handle_to_service'
In order to remove the 'vchiq_states' global array, we need to pass the vchiq_instance reference to the 'handle_to_service' function. This will allow accessing the vchiq state through the vchiq instance instead of through the global array. Tested-by: Stefan Wahren <stefan.wahren@i2se.com> Signed-off-by: Adrien Thierry <athierry@redhat.com> Link: https://lore.kernel.org/r/20220518191126.60396-8-athierry@redhat.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
f23f8a05a1
commit
6d02150cdf
3 changed files with 7 additions and 7 deletions
|
@ -1059,7 +1059,7 @@ service_callback(struct vchiq_instance *instance, enum vchiq_reason reason,
|
|||
DEBUG_TRACE(SERVICE_CALLBACK_LINE);
|
||||
|
||||
rcu_read_lock();
|
||||
service = handle_to_service(handle);
|
||||
service = handle_to_service(instance, handle);
|
||||
if (WARN_ON(!service)) {
|
||||
rcu_read_unlock();
|
||||
return VCHIQ_SUCCESS;
|
||||
|
|
|
@ -240,7 +240,7 @@ find_service_by_handle(struct vchiq_instance *instance, unsigned int handle)
|
|||
struct vchiq_service *service;
|
||||
|
||||
rcu_read_lock();
|
||||
service = handle_to_service(handle);
|
||||
service = handle_to_service(instance, handle);
|
||||
if (service && service->srvstate != VCHIQ_SRVSTATE_FREE &&
|
||||
service->handle == handle &&
|
||||
kref_get_unless_zero(&service->ref_count)) {
|
||||
|
@ -281,7 +281,7 @@ find_service_for_instance(struct vchiq_instance *instance, unsigned int handle)
|
|||
struct vchiq_service *service;
|
||||
|
||||
rcu_read_lock();
|
||||
service = handle_to_service(handle);
|
||||
service = handle_to_service(instance, handle);
|
||||
if (service && service->srvstate != VCHIQ_SRVSTATE_FREE &&
|
||||
service->handle == handle &&
|
||||
service->instance == instance &&
|
||||
|
@ -302,7 +302,7 @@ find_closed_service_for_instance(struct vchiq_instance *instance, unsigned int h
|
|||
struct vchiq_service *service;
|
||||
|
||||
rcu_read_lock();
|
||||
service = handle_to_service(handle);
|
||||
service = handle_to_service(instance, handle);
|
||||
if (service &&
|
||||
(service->srvstate == VCHIQ_SRVSTATE_FREE ||
|
||||
service->srvstate == VCHIQ_SRVSTATE_CLOSED) &&
|
||||
|
@ -404,7 +404,7 @@ vchiq_get_client_id(struct vchiq_instance *instance, unsigned int handle)
|
|||
int id;
|
||||
|
||||
rcu_read_lock();
|
||||
service = handle_to_service(handle);
|
||||
service = handle_to_service(instance, handle);
|
||||
id = service ? service->client_id : 0;
|
||||
rcu_read_unlock();
|
||||
return id;
|
||||
|
@ -417,7 +417,7 @@ vchiq_get_service_userdata(struct vchiq_instance *instance, unsigned int handle)
|
|||
struct vchiq_service *service;
|
||||
|
||||
rcu_read_lock();
|
||||
service = handle_to_service(handle);
|
||||
service = handle_to_service(instance, handle);
|
||||
userdata = service ? service->base.userdata : NULL;
|
||||
rcu_read_unlock();
|
||||
return userdata;
|
||||
|
|
|
@ -509,7 +509,7 @@ request_poll(struct vchiq_state *state, struct vchiq_service *service,
|
|||
int poll_type);
|
||||
|
||||
static inline struct vchiq_service *
|
||||
handle_to_service(unsigned int handle)
|
||||
handle_to_service(struct vchiq_instance *instance, unsigned int handle)
|
||||
{
|
||||
int idx = handle & (VCHIQ_MAX_SERVICES - 1);
|
||||
struct vchiq_state *state = vchiq_states[(handle / VCHIQ_MAX_SERVICES) &
|
||||
|
|
Loading…
Reference in a new issue