Commit 86e3d52b authored by Eric Dumazet's avatar Eric Dumazet Committed by Jakub Kicinski
Browse files

phonet: add __rcu annotations



Removes following sparse errors.

make C=2 net/phonet/socket.o net/phonet/af_phonet.o
  CHECK   net/phonet/socket.c
net/phonet/socket.c:619:14: error: incompatible types in comparison expression (different address spaces):
net/phonet/socket.c:619:14:    struct sock [noderef] __rcu *
net/phonet/socket.c:619:14:    struct sock *
net/phonet/socket.c:642:17: error: incompatible types in comparison expression (different address spaces):
net/phonet/socket.c:642:17:    struct sock [noderef] __rcu *
net/phonet/socket.c:642:17:    struct sock *
net/phonet/socket.c:658:17: error: incompatible types in comparison expression (different address spaces):
net/phonet/socket.c:658:17:    struct sock [noderef] __rcu *
net/phonet/socket.c:658:17:    struct sock *
net/phonet/socket.c:677:25: error: incompatible types in comparison expression (different address spaces):
net/phonet/socket.c:677:25:    struct sock [noderef] __rcu *
net/phonet/socket.c:677:25:    struct sock *
net/phonet/socket.c:726:21: warning: context imbalance in 'pn_res_seq_start' - wrong count at exit
net/phonet/socket.c:741:13: warning: context imbalance in 'pn_res_seq_stop' - wrong count at exit
  CHECK   net/phonet/af_phonet.c
net/phonet/af_phonet.c:35:14: error: incompatible types in comparison expression (different address spaces):
net/phonet/af_phonet.c:35:14:    struct phonet_protocol const [noderef] __rcu *
net/phonet/af_phonet.c:35:14:    struct phonet_protocol const *
net/phonet/af_phonet.c:474:17: error: incompatible types in comparison expression (different address spaces):
net/phonet/af_phonet.c:474:17:    struct phonet_protocol const [noderef] __rcu *
net/phonet/af_phonet.c:474:17:    struct phonet_protocol const *
net/phonet/af_phonet.c:486:9: error: incompatible types in comparison expression (different address spaces):
net/phonet/af_phonet.c:486:9:    struct phonet_protocol const [noderef] __rcu *
net/phonet/af_phonet.c:486:9:    struct phonet_protocol const *

Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
Acked-by: default avatarRémi Denis-Courmont <courmisch@gmail.com>
Link: https://patch.msgid.link/20250811145252.1007242-1-edumazet@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f8262b8d
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@
#include <net/phonet/pn_dev.h>

/* Transport protocol registration */
static const struct phonet_protocol *proto_tab[PHONET_NPROTO] __read_mostly;
static const struct phonet_protocol __rcu *proto_tab[PHONET_NPROTO] __read_mostly;

static const struct phonet_protocol *phonet_proto_get(unsigned int protocol)
{
@@ -482,7 +482,7 @@ void phonet_proto_unregister(unsigned int protocol,
			const struct phonet_protocol *pp)
{
	mutex_lock(&proto_tab_lock);
	BUG_ON(proto_tab[protocol] != pp);
	BUG_ON(rcu_access_pointer(proto_tab[protocol]) != pp);
	RCU_INIT_POINTER(proto_tab[protocol], NULL);
	mutex_unlock(&proto_tab_lock);
	synchronize_rcu();
+12 −11
Original line number Diff line number Diff line
@@ -602,7 +602,7 @@ const struct seq_operations pn_sock_seq_ops = {
#endif

static struct  {
	struct sock *sk[256];
	struct sock __rcu *sk[256];
} pnres;

/*
@@ -654,7 +654,7 @@ int pn_sock_unbind_res(struct sock *sk, u8 res)
		return -EPERM;

	mutex_lock(&resource_mutex);
	if (pnres.sk[res] == sk) {
	if (rcu_access_pointer(pnres.sk[res]) == sk) {
		RCU_INIT_POINTER(pnres.sk[res], NULL);
		ret = 0;
	}
@@ -673,7 +673,7 @@ void pn_sock_unbind_all_res(struct sock *sk)

	mutex_lock(&resource_mutex);
	for (res = 0; res < 256; res++) {
		if (pnres.sk[res] == sk) {
		if (rcu_access_pointer(pnres.sk[res]) == sk) {
			RCU_INIT_POINTER(pnres.sk[res], NULL);
			match++;
		}
@@ -688,7 +688,7 @@ void pn_sock_unbind_all_res(struct sock *sk)
}

#ifdef CONFIG_PROC_FS
static struct sock **pn_res_get_idx(struct seq_file *seq, loff_t pos)
static struct sock __rcu **pn_res_get_idx(struct seq_file *seq, loff_t pos)
{
	struct net *net = seq_file_net(seq);
	unsigned int i;
@@ -697,7 +697,7 @@ static struct sock **pn_res_get_idx(struct seq_file *seq, loff_t pos)
		return NULL;

	for (i = 0; i < 256; i++) {
		if (pnres.sk[i] == NULL)
		if (rcu_access_pointer(pnres.sk[i]) == NULL)
			continue;
		if (!pos)
			return pnres.sk + i;
@@ -706,7 +706,7 @@ static struct sock **pn_res_get_idx(struct seq_file *seq, loff_t pos)
	return NULL;
}

static struct sock **pn_res_get_next(struct seq_file *seq, struct sock **sk)
static struct sock __rcu **pn_res_get_next(struct seq_file *seq, struct sock __rcu **sk)
{
	struct net *net = seq_file_net(seq);
	unsigned int i;
@@ -728,7 +728,7 @@ static void *pn_res_seq_start(struct seq_file *seq, loff_t *pos)

static void *pn_res_seq_next(struct seq_file *seq, void *v, loff_t *pos)
{
	struct sock **sk;
	struct sock __rcu **sk;

	if (v == SEQ_START_TOKEN)
		sk = pn_res_get_idx(seq, 0);
@@ -747,11 +747,12 @@ static void pn_res_seq_stop(struct seq_file *seq, void *v)
static int pn_res_seq_show(struct seq_file *seq, void *v)
{
	seq_setwidth(seq, 63);
	if (v == SEQ_START_TOKEN)
	if (v == SEQ_START_TOKEN) {
		seq_puts(seq, "rs   uid inode");
	else {
		struct sock **psk = v;
		struct sock *sk = *psk;
	} else {
		struct sock __rcu **psk = v;
		struct sock *sk = rcu_dereference_protected(*psk,
					lockdep_is_held(&resource_mutex));

		seq_printf(seq, "%02X %5u %lu",
			   (int) (psk - pnres.sk),