mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
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: Eric Dumazet <edumazet@google.com> Acked-by: Rémi Denis-Courmont <courmisch@gmail.com> Link: https://patch.msgid.link/20250811145252.1007242-1-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f8262b8dad
commit
86e3d52bd3
@ -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();
|
||||
|
||||
@ -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),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user