Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b003f4e1 authored by Jan Kiszka's avatar Jan Kiszka Committed by David S. Miller
Browse files

CAPI: Silence lockdep warning on get_capi_appl_by_nr usage



As long as we hold capi_controller_lock, we can safely access
capi_applications without RCU protection as no one can modify the
application list underneath us. Introduce an RCU-free
__get_capi_appl_by_nr for this purpose. This silences lockdep warnings
on suspicious rcu_dereference usage.

Signed-off-by: default avatarJan Kiszka <jan.kiszka@web.de>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 1e253c3b
Loading
Loading
Loading
Loading
+14 −5
Original line number Original line Diff line number Diff line
@@ -98,6 +98,16 @@ static inline struct capi_ctr *get_capi_ctr_by_nr(u16 contr)
	return capi_controller[contr - 1];
	return capi_controller[contr - 1];
}
}


static inline struct capi20_appl *__get_capi_appl_by_nr(u16 applid)
{
	lockdep_assert_held(&capi_controller_lock);

	if (applid - 1 >= CAPI_MAXAPPL)
		return NULL;

	return capi_applications[applid - 1];
}

static inline struct capi20_appl *get_capi_appl_by_nr(u16 applid)
static inline struct capi20_appl *get_capi_appl_by_nr(u16 applid)
{
{
	if (applid - 1 >= CAPI_MAXAPPL)
	if (applid - 1 >= CAPI_MAXAPPL)
@@ -185,9 +195,8 @@ static void notify_up(u32 contr)
		ctr->state = CAPI_CTR_RUNNING;
		ctr->state = CAPI_CTR_RUNNING;


		for (applid = 1; applid <= CAPI_MAXAPPL; applid++) {
		for (applid = 1; applid <= CAPI_MAXAPPL; applid++) {
			ap = get_capi_appl_by_nr(applid);
			ap = __get_capi_appl_by_nr(applid);
			if (!ap)
			if (ap)
				continue;
				register_appl(ctr, applid, &ap->rparam);
				register_appl(ctr, applid, &ap->rparam);
		}
		}


@@ -215,7 +224,7 @@ static void ctr_down(struct capi_ctr *ctr, int new_state)
	memset(ctr->serial, 0, sizeof(ctr->serial));
	memset(ctr->serial, 0, sizeof(ctr->serial));


	for (applid = 1; applid <= CAPI_MAXAPPL; applid++) {
	for (applid = 1; applid <= CAPI_MAXAPPL; applid++) {
		ap = get_capi_appl_by_nr(applid);
		ap = __get_capi_appl_by_nr(applid);
		if (ap)
		if (ap)
			capi_ctr_put(ctr);
			capi_ctr_put(ctr);
	}
	}