* [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default
@ 2021-08-09 18:53 Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl Tom Herbert
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Tom Herbert @ 2021-08-09 18:53 UTC (permalink / raw)
To: netdev, davem, brakmo, ycheng, eric.dumazet, a.e.azimov; +Cc: Tom Herbert
Alexander Azimov performed some nice analysis of the feature in Linux
stack where the IPv6 flow label is changed when the stack detects a
connection is failing. The idea of the algorithm is to try to find a
better path. His reults are quite impressive, and show that this form
of source routing can work effectively.
Alex raised an issue in that if the server endpoint is an IP anycast
address, the connection might break if the flow label changes routing
of packets on the connection. Anycast is known to be susceptible to
route changes, not just those caused be flow label. The concern is that
flow label modulation might increases the chances that anycast
connections might break, especially if the rethink occurs after just
one RTO which is the current behavior.
This patch set makes the rethink behavior granular and configurable.
It allows control of when to do the hash rethink: upon negative advice,
at RTO in SYN state, at RTO when not in SYN state. The behavior can
be configured by sysctl and by a socket option.
This patch set the defautl rethink behavior to be to do a rethink only
on negative advice. This is reverts back to the original behavior of
the hash rethink mechanism. This less aggressive with the intent of
mitigating potentail breakages when anycast addresses are present.
For those users that are benefitting from changing the hash at the
first RTO, they would retain that behavior by setting the sysctl.
*** BLURB HERE ***
Tom Herbert (3):
txhash: Make rethinking txhash behavior configurable via sysctl
txhash: Add socket option to control TX hash rethink behavior
txhash: Change default rethink behavior to be less aggressive
arch/alpha/include/uapi/asm/socket.h | 2 ++
arch/mips/include/uapi/asm/socket.h | 2 ++
arch/parisc/include/uapi/asm/socket.h | 2 ++
arch/sparc/include/uapi/asm/socket.h | 3 ++-
include/net/netns/core.h | 2 ++
include/net/sock.h | 32 +++++++++++++++++++--------
include/uapi/asm-generic/socket.h | 2 ++
include/uapi/linux/socket.h | 13 +++++++++++
net/core/net_namespace.c | 4 ++++
net/core/sock.c | 16 ++++++++++++++
net/core/sysctl_net_core.c | 7 ++++++
net/ipv4/tcp_input.c | 2 +-
net/ipv4/tcp_timer.c | 5 ++++-
13 files changed, 80 insertions(+), 12 deletions(-)
--
2.25.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl
2021-08-09 18:53 [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Tom Herbert
@ 2021-08-09 18:53 ` Tom Herbert
2021-08-09 20:20 ` kernel test robot
2021-08-09 20:39 ` kernel test robot
2021-08-09 18:53 ` [RFC PATCH net-next 2/3] txhash: Add socket option to control TX hash rethink behavior Tom Herbert
` (2 subsequent siblings)
3 siblings, 2 replies; 8+ messages in thread
From: Tom Herbert @ 2021-08-09 18:53 UTC (permalink / raw)
To: netdev, davem, brakmo, ycheng, eric.dumazet, a.e.azimov; +Cc: Tom Herbert
Add a per ns sysctl that controls the txhash rethink behavior,
sk_rethink_txhash. This sysctl value is a mask rethink modes that are:
rethink at negative advice, rethink at SYN RTO, and rethink at non-SYN
RTO. A value of zero disables hash rethink. The default mask is set
to rethink with all three modes (retains current default behavior)
---
include/net/netns/core.h | 2 ++
include/net/sock.h | 26 +++++++++++++++++---------
include/uapi/linux/socket.h | 13 +++++++++++++
net/core/net_namespace.c | 6 ++++++
net/core/sysctl_net_core.c | 7 +++++++
net/ipv4/tcp_input.c | 2 +-
net/ipv4/tcp_timer.c | 5 ++++-
7 files changed, 50 insertions(+), 11 deletions(-)
diff --git a/include/net/netns/core.h b/include/net/netns/core.h
index 36c2d998a43c..503f43bfc1d3 100644
--- a/include/net/netns/core.h
+++ b/include/net/netns/core.h
@@ -11,6 +11,8 @@ struct netns_core {
int sysctl_somaxconn;
+ unsigend int sysctl_txrehash_mode;
+
#ifdef CONFIG_PROC_FS
int __percpu *sock_inuse;
struct prot_inuse __percpu *prot_inuse;
diff --git a/include/net/sock.h b/include/net/sock.h
index 6e761451c927..6ef5314e8eed 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -577,6 +577,12 @@ static inline bool sk_user_data_is_nocopy(const struct sock *sk)
__tmp | SK_USER_DATA_NOCOPY); \
})
+static inline
+struct net *sock_net(const struct sock *sk)
+{
+ return read_pnet(&sk->sk_net);
+}
+
/*
* SK_CAN_REUSE and SK_NO_REUSE on a socket mean that the socket is OK
* or not whether his port will be reused by someone else. SK_FORCE_REUSE
@@ -1940,12 +1946,20 @@ static inline void sk_set_txhash(struct sock *sk)
WRITE_ONCE(sk->sk_txhash, net_tx_rndhash());
}
-static inline bool sk_rethink_txhash(struct sock *sk)
+static inline bool sk_rethink_txhash(struct sock *sk, unsigned int level)
{
- if (sk->sk_txhash) {
+ unsigned int rehash_mode;
+
+ if (!sk->sk_txhash)
+ return false;
+
+ rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
+
+ if (level & rehash_mode) {
sk_set_txhash(sk);
return true;
}
+
return false;
}
@@ -1986,7 +2000,7 @@ static inline void __dst_negative_advice(struct sock *sk)
static inline void dst_negative_advice(struct sock *sk)
{
- sk_rethink_txhash(sk);
+ sk_rethink_txhash(sk, SOCK_TXREHASH_MODE_NEG_ADVICE);
__dst_negative_advice(sk);
}
@@ -2591,12 +2605,6 @@ static inline void sk_eat_skb(struct sock *sk, struct sk_buff *skb)
__kfree_skb(skb);
}
-static inline
-struct net *sock_net(const struct sock *sk)
-{
- return read_pnet(&sk->sk_net);
-}
-
static inline
void sock_net_set(struct sock *sk, struct net *net)
{
diff --git a/include/uapi/linux/socket.h b/include/uapi/linux/socket.h
index eb0a9a5b6e71..2c2cef795a9b 100644
--- a/include/uapi/linux/socket.h
+++ b/include/uapi/linux/socket.h
@@ -31,4 +31,17 @@ struct __kernel_sockaddr_storage {
#define SOCK_BUF_LOCK_MASK (SOCK_SNDBUF_LOCK | SOCK_RCVBUF_LOCK)
+#define SOCK_TXREHASH_MODE_DISABLE 0
+
+/* Flag bits for individual rehash function modes */
+#define SOCK_TXREHASH_MODE_NEG_ADVICE 0x1
+#define SOCK_TXREHASH_MODE_SYN_RTO 0x2
+#define SOCK_TXREHASH_MODE_RTO 0x4
+
+#define SOCK_TXREHASH_MODE_DEFAULT -1U
+
+#define SOCK_TXREHASH_MODE_MASK (SOCK_TXREHASH_MODE_NEG_ADVICE | \
+ SOCK_TXREHASH_MODE_SYN_RTO | \
+ SOCK_TXREHASH_MODE_RTO)
+
#endif /* _UAPI_LINUX_SOCKET_H */
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 9b5a767eddd5..03d3767e6728 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -366,6 +366,12 @@ static __net_init int setup_net(struct net *net, struct user_namespace *user_ns)
static int __net_init net_defaults_init_net(struct net *net)
{
net->core.sysctl_somaxconn = SOMAXCONN;
+
+ /* Default rethink mode is aggrssive (i.e. rethink on first RTO) */
+ net->core.sysctl_txrehash_mode = SOCK_TXREHASH_MODE_NEG_ADVICE |
+ SOCK_TXREHASH_MODE_SYN_RTO |
+ SOCK_TXREHASH_MODE_RTO;
+
return 0;
}
diff --git a/net/core/sysctl_net_core.c b/net/core/sysctl_net_core.c
index c8496c1142c9..7e828a892bf5 100644
--- a/net/core/sysctl_net_core.c
+++ b/net/core/sysctl_net_core.c
@@ -592,6 +592,13 @@ static struct ctl_table netns_core_table[] = {
.extra1 = SYSCTL_ZERO,
.proc_handler = proc_dointvec_minmax
},
+ {
+ .procname = "txrehash_mode",
+ .data = &init_net.core.sysctl_txrehash_mode,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+ .proc_handler = proc_dointvec
+ },
{ }
};
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 3f7bd7ae7d7a..08eeb2523393 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -4442,7 +4442,7 @@ static void tcp_rcv_spurious_retrans(struct sock *sk, const struct sk_buff *skb)
* DSACK state and change the txhash to re-route speculatively.
*/
if (TCP_SKB_CB(skb)->seq == tcp_sk(sk)->duplicate_sack[0].start_seq &&
- sk_rethink_txhash(sk))
+ sk_rethink_txhash(sk, SOCK_TXREHASH_MODE_RTO))
NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPDUPLICATEDATAREHASH);
}
diff --git a/net/ipv4/tcp_timer.c b/net/ipv4/tcp_timer.c
index 20cf4a98c69d..53ae43ab5ebe 100644
--- a/net/ipv4/tcp_timer.c
+++ b/net/ipv4/tcp_timer.c
@@ -234,6 +234,7 @@ static int tcp_write_timeout(struct sock *sk)
struct tcp_sock *tp = tcp_sk(sk);
struct net *net = sock_net(sk);
bool expired = false, do_reset;
+ unsigned int rehash_mode;
int retry_until;
if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
@@ -241,6 +242,7 @@ static int tcp_write_timeout(struct sock *sk)
__dst_negative_advice(sk);
retry_until = icsk->icsk_syn_retries ? : net->ipv4.sysctl_tcp_syn_retries;
expired = icsk->icsk_retransmits >= retry_until;
+ rehash_mode = SOCK_TXREHASH_MODE_SYN_RTO;
} else {
if (retransmits_timed_out(sk, net->ipv4.sysctl_tcp_retries1, 0)) {
/* Black hole detection */
@@ -260,6 +262,7 @@ static int tcp_write_timeout(struct sock *sk)
if (tcp_out_of_resources(sk, do_reset))
return 1;
}
+ rehash_mode = SOCK_TXREHASH_MODE_RTO;
}
if (!expired)
expired = retransmits_timed_out(sk, retry_until,
@@ -277,7 +280,7 @@ static int tcp_write_timeout(struct sock *sk)
return 1;
}
- if (sk_rethink_txhash(sk)) {
+ if (sk_rethink_txhash(sk, rehash_mode)) {
tp->timeout_rehash++;
__NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPTIMEOUTREHASH);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [RFC PATCH net-next 2/3] txhash: Add socket option to control TX hash rethink behavior
2021-08-09 18:53 [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl Tom Herbert
@ 2021-08-09 18:53 ` Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 3/3] txhash: Change default rethink behavior to be less aggressive Tom Herbert
2021-08-09 21:56 ` [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Yuchung Cheng
3 siblings, 0 replies; 8+ messages in thread
From: Tom Herbert @ 2021-08-09 18:53 UTC (permalink / raw)
To: netdev, davem, brakmo, ycheng, eric.dumazet, a.e.azimov; +Cc: Tom Herbert
Add the SO_TXREHASH_MODE socket option to control hash rethink behavior
per socket. The setsockopt argument is a mask of rethink modes
(SOCK_TXREHASH_MODE_NEG_ADVICE, SOCK_TXREHASH_MODE_SYN_RTO,
and SOCK_TXREHASH_MODE_RTO). The argument may also be -1U
(SOCK_TXREHASH_MODE_DEFAULT) which indicates that the default system
value should be used (see txrehash_mode sysctl)
---
arch/alpha/include/uapi/asm/socket.h | 2 ++
arch/mips/include/uapi/asm/socket.h | 2 ++
arch/parisc/include/uapi/asm/socket.h | 2 ++
arch/sparc/include/uapi/asm/socket.h | 3 ++-
include/net/sock.h | 8 +++++++-
include/uapi/asm-generic/socket.h | 2 ++
net/core/sock.c | 16 ++++++++++++++++
7 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/arch/alpha/include/uapi/asm/socket.h b/arch/alpha/include/uapi/asm/socket.h
index 1dd9baf4a6c2..1165cdab5277 100644
--- a/arch/alpha/include/uapi/asm/socket.h
+++ b/arch/alpha/include/uapi/asm/socket.h
@@ -131,6 +131,8 @@
#define SO_BUF_LOCK 72
+#define SO_TXREHASH_MODE 73
+
#if !defined(__KERNEL__)
#if __BITS_PER_LONG == 64
diff --git a/arch/mips/include/uapi/asm/socket.h b/arch/mips/include/uapi/asm/socket.h
index 1eaf6a1ca561..91412f7725bd 100644
--- a/arch/mips/include/uapi/asm/socket.h
+++ b/arch/mips/include/uapi/asm/socket.h
@@ -142,6 +142,8 @@
#define SO_BUF_LOCK 72
+#define SO_TXREHASH_MODE 73
+
#if !defined(__KERNEL__)
#if __BITS_PER_LONG == 64
diff --git a/arch/parisc/include/uapi/asm/socket.h b/arch/parisc/include/uapi/asm/socket.h
index 8baaad52d799..80e0eddc6730 100644
--- a/arch/parisc/include/uapi/asm/socket.h
+++ b/arch/parisc/include/uapi/asm/socket.h
@@ -123,6 +123,8 @@
#define SO_BUF_LOCK 0x4046
+#define SO_TXREHASH_MODE 0x4047
+
#if !defined(__KERNEL__)
#if __BITS_PER_LONG == 64
diff --git a/arch/sparc/include/uapi/asm/socket.h b/arch/sparc/include/uapi/asm/socket.h
index e80ee8641ac3..2fd5679e4116 100644
--- a/arch/sparc/include/uapi/asm/socket.h
+++ b/arch/sparc/include/uapi/asm/socket.h
@@ -124,8 +124,9 @@
#define SO_BUF_LOCK 0x0051
-#if !defined(__KERNEL__)
+#define SO_TXREHASH_MODE 0x0052
+#if !defined(__KERNEL__)
#if __BITS_PER_LONG == 64
#define SO_TIMESTAMP SO_TIMESTAMP_OLD
diff --git a/include/net/sock.h b/include/net/sock.h
index 6ef5314e8eed..b6ddb5278b8c 100644
--- a/include/net/sock.h
+++ b/include/net/sock.h
@@ -313,6 +313,7 @@ struct bpf_local_storage;
* @sk_rcvtimeo: %SO_RCVTIMEO setting
* @sk_sndtimeo: %SO_SNDTIMEO setting
* @sk_txhash: computed flow hash for use on transmit
+ * @sk_txrehash_mode: configuration bits for controlling TX hash rethink
* @sk_filter: socket filtering instructions
* @sk_timer: sock cleanup timer
* @sk_stamp: time stamp of last packet received
@@ -462,6 +463,7 @@ struct sock {
unsigned int sk_gso_max_size;
gfp_t sk_allocation;
__u32 sk_txhash;
+ unsigned int sk_txrehash_mode;
/*
* Because of non atomicity rules, all
@@ -1953,7 +1955,11 @@ static inline bool sk_rethink_txhash(struct sock *sk, unsigned int level)
if (!sk->sk_txhash)
return false;
- rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
+ if (sk->sk_txrehash_mode == SOCK_TXREHASH_MODE_DEFAULT)
+ rehash_mode =
+ READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
+ else
+ rehash_mode = sk->sk_txrehash_mode;
if (level & rehash_mode) {
sk_set_txhash(sk);
diff --git a/include/uapi/asm-generic/socket.h b/include/uapi/asm-generic/socket.h
index 1f0a2b4864e4..daa775cc4108 100644
--- a/include/uapi/asm-generic/socket.h
+++ b/include/uapi/asm-generic/socket.h
@@ -126,6 +126,8 @@
#define SO_BUF_LOCK 72
+#define SO_TXREHASH_MODE 73
+
#if !defined(__KERNEL__)
#if __BITS_PER_LONG == 64 || (defined(__x86_64__) && defined(__ILP32__))
diff --git a/net/core/sock.c b/net/core/sock.c
index aada649e07e8..946d9e9242c8 100644
--- a/net/core/sock.c
+++ b/net/core/sock.c
@@ -1367,6 +1367,17 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
~SOCK_BUF_LOCK_MASK);
break;
+ case SO_TXREHASH_MODE:
+ if (val == SOCK_TXREHASH_MODE_DEFAULT ||
+ (val & ~SOCK_TXREHASH_MODE_MASK)) {
+ ret = -EINVAL;
+ break;
+ }
+
+ sk->sk_txrehash_mode = val;
+
+ break;
+
default:
ret = -ENOPROTOOPT;
break;
@@ -1733,6 +1744,10 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
v.val = sk->sk_userlocks & SOCK_BUF_LOCK_MASK;
break;
+ case SO_TXREHASH_MODE:
+ v.val = sk->sk_txrehash_mode;
+ break;
+
default:
/* We implement the SO_SNDLOWAT etc to not be settable
* (1003.1g 7).
@@ -3158,6 +3173,7 @@ void sock_init_data(struct socket *sock, struct sock *sk)
sk->sk_pacing_rate = ~0UL;
WRITE_ONCE(sk->sk_pacing_shift, 10);
sk->sk_incoming_cpu = -1;
+ sk->sk_txrehash_mode = SOCK_TXREHASH_MODE_DEFAULT;
sk_rx_queue_clear(sk);
/*
--
2.25.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [RFC PATCH net-next 3/3] txhash: Change default rethink behavior to be less aggressive
2021-08-09 18:53 [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 2/3] txhash: Add socket option to control TX hash rethink behavior Tom Herbert
@ 2021-08-09 18:53 ` Tom Herbert
2021-08-09 21:56 ` [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Yuchung Cheng
3 siblings, 0 replies; 8+ messages in thread
From: Tom Herbert @ 2021-08-09 18:53 UTC (permalink / raw)
To: netdev, davem, brakmo, ycheng, eric.dumazet, a.e.azimov; +Cc: Tom Herbert
Revert the default rethink behavior to only do a rethink upon negative
advice (at three RTOs with current defaults). This is less aggressive
than the current default which is to rethink the hash at the first
RTO.
The rationale for this change is that IP anycast relies on consistent
routing and changing the hash may affect the routing of the packet
For instance, if the hash is changed then the flow label used for
a TCP connection is changed and so the routing of packets for the
connection may change. If the destination address is anycast, a
route change may direct packets to a different server than doesn't
have state for the connection thereby breaking the connection is broken.
---
net/core/net_namespace.c | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 03d3767e6728..bf9696dd7106 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -367,10 +367,8 @@ static int __net_init net_defaults_init_net(struct net *net)
{
net->core.sysctl_somaxconn = SOMAXCONN;
- /* Default rethink mode is aggrssive (i.e. rethink on first RTO) */
- net->core.sysctl_txrehash_mode = SOCK_TXREHASH_MODE_NEG_ADVICE |
- SOCK_TXREHASH_MODE_SYN_RTO |
- SOCK_TXREHASH_MODE_RTO;
+ /* Default rethink mode is negative advice (i.e. not rthink on RTO) */
+ net->core.sysctl_txrehash_mode = SOCK_TXREHASH_MODE_NEG_ADVICE;
return 0;
}
--
2.25.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl
2021-08-09 18:53 ` [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl Tom Herbert
@ 2021-08-09 20:20 ` kernel test robot
2021-08-09 20:39 ` kernel test robot
1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-08-09 20:20 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 39675 bytes --]
Hi Tom,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Tom-Herbert/txhash-Make-hash-rethink-configurable-and-change-the-default/20210810-025605
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 2a2b6e3640c43a808dcb5226963e2cc0669294b1
config: x86_64-randconfig-r035-20210809 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce (this is a W=1 build):
# https://github.com/0day-ci/linux/commit/c622a47fb5a95eba759d650cba863ff963bb1562
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Tom-Herbert/txhash-Make-hash-rethink-configurable-and-change-the-default/20210810-025605
git checkout c622a47fb5a95eba759d650cba863ff963bb1562
# save the attached .config to linux build tree
mkdir build_dir
make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash net/core/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:279:13: note: in definition of macro '__unqual_scalar_typeof'
279 | _Generic((x), \
| ^
include/asm-generic/rwonce.h:50:2: note: in expansion of macro '__READ_ONCE'
50 | __READ_ONCE(x); \
| ^~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
In file included from ./arch/x86/include/generated/asm/rwonce.h:1,
from include/linux/compiler.h:264,
from include/linux/export.h:43,
from include/linux/linkage.h:7,
from include/linux/kernel.h:8,
from include/linux/unaligned/packed_struct.h:4,
from include/asm-generic/unaligned.h:9,
from ./arch/x86/include/generated/asm/unaligned.h:1,
from net/core/sock.c:88:
include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/asm-generic/rwonce.h:44:72: note: in definition of macro '__READ_ONCE'
44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
| ^
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
In file included from include/asm-generic/percpu.h:7,
from arch/x86/include/asm/percpu.h:390,
from arch/x86/include/asm/current.h:6,
from arch/x86/include/asm/processor.h:17,
from arch/x86/include/asm/timex.h:5,
from include/linux/timex.h:65,
from include/linux/time32.h:13,
from include/linux/time.h:60,
from include/linux/skbuff.h:15,
from include/linux/ip.h:16,
from include/net/ip.h:22,
from include/linux/errqueue.h:6,
from net/core/sock.c:91:
net/core/sock.c: In function 'sock_prot_inuse_add':
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
include/linux/percpu-defs.h:219:47: note: in definition of macro '__verify_pcpu_ptr'
219 | const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
| ^~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
include/linux/percpu-defs.h:376:16: note: in definition of macro '__pcpu_size_call'
376 | switch(sizeof(variable)) { \
| ^~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
In file included from arch/x86/include/asm/current.h:6,
from arch/x86/include/asm/processor.h:17,
from arch/x86/include/asm/timex.h:5,
from include/linux/timex.h:65,
from include/linux/time32.h:13,
from include/linux/time.h:60,
from include/linux/skbuff.h:15,
from include/linux/ip.h:16,
from include/net/ip.h:22,
from include/linux/errqueue.h:6,
from net/core/sock.c:91:
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:130:10: note: in definition of macro 'percpu_add_op'
130 | typeof(var) pao_tmp__; \
| ^~~
include/linux/percpu-defs.h:377:11: note: in expansion of macro 'raw_cpu_add_1'
377 | case 1: stem##1(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:235:34: note: in expansion of macro 'percpu_add_op'
235 | #define raw_cpu_add_1(pcp, val) percpu_add_op(1, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:377:11: note: in expansion of macro 'raw_cpu_add_1'
377 | case 1: stem##1(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:235:34: note: in expansion of macro 'percpu_add_op'
235 | #define raw_cpu_add_1(pcp, val) percpu_add_op(1, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:377:11: note: in expansion of macro 'raw_cpu_add_1'
377 | case 1: stem##1(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:105:10: note: in definition of macro 'percpu_to_op'
105 | typeof(_var) pto_tmp__; \
| ^~~~
arch/x86/include/asm/percpu.h:235:34: note: in expansion of macro 'percpu_add_op'
235 | #define raw_cpu_add_1(pcp, val) percpu_add_op(1, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:377:11: note: in expansion of macro 'raw_cpu_add_1'
377 | case 1: stem##1(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:110:20: note: in definition of macro 'percpu_to_op'
110 | : [var] "+m" (_var) \
| ^~~~
arch/x86/include/asm/percpu.h:235:34: note: in expansion of macro 'percpu_add_op'
235 | #define raw_cpu_add_1(pcp, val) percpu_add_op(1, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:377:11: note: in expansion of macro 'raw_cpu_add_1'
377 | case 1: stem##1(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:130:10: note: in definition of macro 'percpu_add_op'
130 | typeof(var) pao_tmp__; \
| ^~~
include/linux/percpu-defs.h:378:11: note: in expansion of macro 'raw_cpu_add_2'
378 | case 2: stem##2(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:236:34: note: in expansion of macro 'percpu_add_op'
236 | #define raw_cpu_add_2(pcp, val) percpu_add_op(2, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:378:11: note: in expansion of macro 'raw_cpu_add_2'
378 | case 2: stem##2(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:236:34: note: in expansion of macro 'percpu_add_op'
236 | #define raw_cpu_add_2(pcp, val) percpu_add_op(2, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:378:11: note: in expansion of macro 'raw_cpu_add_2'
378 | case 2: stem##2(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:105:10: note: in definition of macro 'percpu_to_op'
105 | typeof(_var) pto_tmp__; \
| ^~~~
arch/x86/include/asm/percpu.h:236:34: note: in expansion of macro 'percpu_add_op'
236 | #define raw_cpu_add_2(pcp, val) percpu_add_op(2, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:378:11: note: in expansion of macro 'raw_cpu_add_2'
378 | case 2: stem##2(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:110:20: note: in definition of macro 'percpu_to_op'
110 | : [var] "+m" (_var) \
| ^~~~
arch/x86/include/asm/percpu.h:236:34: note: in expansion of macro 'percpu_add_op'
236 | #define raw_cpu_add_2(pcp, val) percpu_add_op(2, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:378:11: note: in expansion of macro 'raw_cpu_add_2'
378 | case 2: stem##2(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:130:10: note: in definition of macro 'percpu_add_op'
130 | typeof(var) pao_tmp__; \
| ^~~
include/linux/percpu-defs.h:379:11: note: in expansion of macro 'raw_cpu_add_4'
379 | case 4: stem##4(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:237:34: note: in expansion of macro 'percpu_add_op'
237 | #define raw_cpu_add_4(pcp, val) percpu_add_op(4, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:379:11: note: in expansion of macro 'raw_cpu_add_4'
379 | case 4: stem##4(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:237:34: note: in expansion of macro 'percpu_add_op'
237 | #define raw_cpu_add_4(pcp, val) percpu_add_op(4, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:379:11: note: in expansion of macro 'raw_cpu_add_4'
379 | case 4: stem##4(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:105:10: note: in definition of macro 'percpu_to_op'
105 | typeof(_var) pto_tmp__; \
| ^~~~
arch/x86/include/asm/percpu.h:237:34: note: in expansion of macro 'percpu_add_op'
237 | #define raw_cpu_add_4(pcp, val) percpu_add_op(4, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:379:11: note: in expansion of macro 'raw_cpu_add_4'
379 | case 4: stem##4(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:110:20: note: in definition of macro 'percpu_to_op'
110 | : [var] "+m" (_var) \
| ^~~~
arch/x86/include/asm/percpu.h:237:34: note: in expansion of macro 'percpu_add_op'
237 | #define raw_cpu_add_4(pcp, val) percpu_add_op(4, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:379:11: note: in expansion of macro 'raw_cpu_add_4'
379 | case 4: stem##4(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:130:10: note: in definition of macro 'percpu_add_op'
130 | typeof(var) pao_tmp__; \
| ^~~
include/linux/percpu-defs.h:380:11: note: in expansion of macro 'raw_cpu_add_8'
380 | case 8: stem##8(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:317:35: note: in expansion of macro 'percpu_add_op'
317 | #define raw_cpu_add_8(pcp, val) percpu_add_op(8, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:380:11: note: in expansion of macro 'raw_cpu_add_8'
380 | case 8: stem##8(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
>> net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:117:20: note: in definition of macro 'percpu_unary_op'
117 | : [var] "+m" (_var)); \
| ^~~~
arch/x86/include/asm/percpu.h:317:35: note: in expansion of macro 'percpu_add_op'
317 | #define raw_cpu_add_8(pcp, val) percpu_add_op(8, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:380:11: note: in expansion of macro 'raw_cpu_add_8'
380 | case 8: stem##8(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:105:10: note: in definition of macro 'percpu_to_op'
105 | typeof(_var) pto_tmp__; \
| ^~~~
arch/x86/include/asm/percpu.h:317:35: note: in expansion of macro 'percpu_add_op'
317 | #define raw_cpu_add_8(pcp, val) percpu_add_op(8, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:380:11: note: in expansion of macro 'raw_cpu_add_8'
380 | case 8: stem##8(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
net/core/sock.c:3442:26: error: 'struct netns_core' has no member named 'prot_inuse'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^
arch/x86/include/asm/percpu.h:110:20: note: in definition of macro 'percpu_to_op'
110 | : [var] "+m" (_var) \
| ^~~~
arch/x86/include/asm/percpu.h:317:35: note: in expansion of macro 'percpu_add_op'
317 | #define raw_cpu_add_8(pcp, val) percpu_add_op(8, , (pcp), val)
| ^~~~~~~~~~~~~
include/linux/percpu-defs.h:380:11: note: in expansion of macro 'raw_cpu_add_8'
380 | case 8: stem##8(variable, __VA_ARGS__);break; \
| ^~~~
include/linux/percpu-defs.h:422:32: note: in expansion of macro '__pcpu_size_call'
422 | #define raw_cpu_add(pcp, val) __pcpu_size_call(raw_cpu_add_, pcp, val)
| ^~~~~~~~~~~~~~~~
include/linux/percpu-defs.h:458:2: note: in expansion of macro 'raw_cpu_add'
458 | raw_cpu_add(pcp, val); \
| ^~~~~~~~~~~
net/core/sock.c:3442:2: note: in expansion of macro '__this_cpu_add'
3442 | __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
| ^~~~~~~~~~~~~~
In file included from include/asm-generic/percpu.h:7,
from arch/x86/include/asm/percpu.h:390,
from arch/x86/include/asm/current.h:6,
from arch/x86/include/asm/processor.h:17,
from arch/x86/include/asm/timex.h:5,
from include/linux/timex.h:65,
from include/linux/time32.h:13,
from include/linux/time.h:60,
from include/linux/skbuff.h:15,
from include/linux/ip.h:16,
from include/net/ip.h:22,
from include/linux/errqueue.h:6,
from net/core/sock.c:91:
net/core/sock.c: In function 'sock_prot_inuse_get':
net/core/sock.c:3452:31: error: 'struct netns_core' has no member named 'prot_inuse'
3452 | res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
| ^
include/linux/percpu-defs.h:219:47: note: in definition of macro '__verify_pcpu_ptr'
219 | const void __percpu *__vpp_verify = (typeof((ptr) + 0))NULL; \
| ^~~
net/core/sock.c:3452:10: note: in expansion of macro 'per_cpu_ptr'
3452 | res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
| ^~~~~~~~~~~
In file included from include/linux/compiler_types.h:85,
from <command-line>:
net/core/sock.c:3452:31: error: 'struct netns_core' has no member named 'prot_inuse'
3452 | res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
| ^
include/linux/compiler-gcc.h:34:34: note: in definition of macro 'RELOC_HIDE'
34 | __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
| ^~~
include/linux/percpu-defs.h:236:2: note: in expansion of macro 'SHIFT_PERCPU_PTR'
236 | SHIFT_PERCPU_PTR((ptr), per_cpu_offset((cpu))); \
| ^~~~~~~~~~~~~~~~
net/core/sock.c:3452:10: note: in expansion of macro 'per_cpu_ptr'
3452 | res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
| ^~~~~~~~~~~
net/core/sock.c:3452:31: error: 'struct netns_core' has no member named 'prot_inuse'
..
vim +3442 net/core/sock.c
70ee115942be6c Pavel Emelyanov 2008-03-31 3439
70ee115942be6c Pavel Emelyanov 2008-03-31 3440 void sock_prot_inuse_add(struct net *net, struct proto *prot, int val)
70ee115942be6c Pavel Emelyanov 2008-03-31 3441 {
08fc7f8140730d Tonghao Zhang 2017-12-14 @3442 __this_cpu_add(net->core.prot_inuse->val[prot->inuse_idx], val);
70ee115942be6c Pavel Emelyanov 2008-03-31 3443 }
70ee115942be6c Pavel Emelyanov 2008-03-31 3444 EXPORT_SYMBOL_GPL(sock_prot_inuse_add);
70ee115942be6c Pavel Emelyanov 2008-03-31 3445
70ee115942be6c Pavel Emelyanov 2008-03-31 3446 int sock_prot_inuse_get(struct net *net, struct proto *prot)
70ee115942be6c Pavel Emelyanov 2008-03-31 3447 {
70ee115942be6c Pavel Emelyanov 2008-03-31 @3448 int cpu, idx = prot->inuse_idx;
70ee115942be6c Pavel Emelyanov 2008-03-31 3449 int res = 0;
70ee115942be6c Pavel Emelyanov 2008-03-31 3450
70ee115942be6c Pavel Emelyanov 2008-03-31 3451 for_each_possible_cpu(cpu)
08fc7f8140730d Tonghao Zhang 2017-12-14 3452 res += per_cpu_ptr(net->core.prot_inuse, cpu)->val[idx];
70ee115942be6c Pavel Emelyanov 2008-03-31 3453
70ee115942be6c Pavel Emelyanov 2008-03-31 3454 return res >= 0 ? res : 0;
70ee115942be6c Pavel Emelyanov 2008-03-31 3455 }
70ee115942be6c Pavel Emelyanov 2008-03-31 3456 EXPORT_SYMBOL_GPL(sock_prot_inuse_get);
70ee115942be6c Pavel Emelyanov 2008-03-31 3457
648845ab7e2009 Tonghao Zhang 2017-12-14 3458 static void sock_inuse_add(struct net *net, int val)
648845ab7e2009 Tonghao Zhang 2017-12-14 3459 {
648845ab7e2009 Tonghao Zhang 2017-12-14 @3460 this_cpu_add(*net->core.sock_inuse, val);
648845ab7e2009 Tonghao Zhang 2017-12-14 3461 }
648845ab7e2009 Tonghao Zhang 2017-12-14 3462
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 32371 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl
2021-08-09 18:53 ` [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl Tom Herbert
2021-08-09 20:20 ` kernel test robot
@ 2021-08-09 20:39 ` kernel test robot
1 sibling, 0 replies; 8+ messages in thread
From: kernel test robot @ 2021-08-09 20:39 UTC (permalink / raw)
To: kbuild-all
[-- Attachment #1: Type: text/plain, Size: 31073 bytes --]
Hi Tom,
[FYI, it's a private test report for your RFC patch.]
[auto build test ERROR on net-next/master]
url: https://github.com/0day-ci/linux/commits/Tom-Herbert/txhash-Make-hash-rethink-configurable-and-change-the-default/20210810-025605
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 2a2b6e3640c43a808dcb5226963e2cc0669294b1
config: alpha-randconfig-r033-20210809 (attached as .config)
compiler: alpha-linux-gcc (GCC) 10.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/c622a47fb5a95eba759d650cba863ff963bb1562
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Tom-Herbert/txhash-Make-hash-rethink-configurable-and-change-the-default/20210810-025605
git checkout c622a47fb5a95eba759d650cba863ff963bb1562
# save the attached .config to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-10.3.0 make.cross O=build_dir ARCH=alpha SHELL=/bin/bash kernel/bpf/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
In file included from include/net/net_namespace.h:16,
from include/linux/netdevice.h:37,
from include/linux/if_vlan.h:10,
from include/linux/filter.h:21,
from kernel/bpf/core.c:21:
>> include/net/netns/core.h:14:2: error: expected specifier-qualifier-list before 'unsigend'
14 | unsigend int sysctl_txrehash_mode;
| ^~~~~~~~
kernel/bpf/core.c:1358:12: warning: no previous prototype for 'bpf_probe_read_kernel' [-Wmissing-prototypes]
1358 | u64 __weak bpf_probe_read_kernel(void *dst, u32 size, const void *unsafe_ptr)
| ^~~~~~~~~~~~~~~~~~~~~
--
In file included from include/net/net_namespace.h:16,
from include/linux/netdevice.h:37,
from include/trace/events/xdp.h:8,
from include/linux/bpf_trace.h:5,
from kernel/bpf/syscall.c:5:
>> include/net/netns/core.h:14:2: error: expected specifier-qualifier-list before 'unsigend'
14 | unsigend int sysctl_txrehash_mode;
| ^~~~~~~~
--
In file included from include/net/net_namespace.h:16,
from include/linux/netdevice.h:37,
from include/linux/if_vlan.h:10,
from include/linux/filter.h:21,
from include/linux/bpf_verifier.h:9,
from kernel/bpf/verifier.c:12:
>> include/net/netns/core.h:14:2: error: expected specifier-qualifier-list before 'unsigend'
14 | unsigend int sysctl_txrehash_mode;
| ^~~~~~~~
In file included from include/linux/bpf_verifier.h:9,
from kernel/bpf/verifier.c:12:
kernel/bpf/verifier.c: In function 'jit_subprogs':
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'unsigned int (*)(const void *, const struct bpf_insn *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12461:16: note: in expansion of macro 'BPF_CAST_CALL'
12461 | insn->imm = BPF_CAST_CALL(func[subprog]->bpf_func) -
| ^~~~~~~~~~~~~
kernel/bpf/verifier.c: In function 'do_misc_fixups':
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'void * (* const)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12942:17: note: in expansion of macro 'BPF_CAST_CALL'
12942 | insn->imm = BPF_CAST_CALL(ops->map_lookup_elem) -
| ^~~~~~~~~~~~~
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'int (* const)(struct bpf_map *, void *, void *, u64)' {aka 'int (* const)(struct bpf_map *, void *, void *, long long unsigned int)'} to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12946:17: note: in expansion of macro 'BPF_CAST_CALL'
12946 | insn->imm = BPF_CAST_CALL(ops->map_update_elem) -
| ^~~~~~~~~~~~~
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'int (* const)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12950:17: note: in expansion of macro 'BPF_CAST_CALL'
12950 | insn->imm = BPF_CAST_CALL(ops->map_delete_elem) -
| ^~~~~~~~~~~~~
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'int (* const)(struct bpf_map *, void *, u64)' {aka 'int (* const)(struct bpf_map *, void *, long long unsigned int)'} to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12954:17: note: in expansion of macro 'BPF_CAST_CALL'
12954 | insn->imm = BPF_CAST_CALL(ops->map_push_elem) -
| ^~~~~~~~~~~~~
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'int (* const)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12958:17: note: in expansion of macro 'BPF_CAST_CALL'
12958 | insn->imm = BPF_CAST_CALL(ops->map_pop_elem) -
| ^~~~~~~~~~~~~
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'int (* const)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12962:17: note: in expansion of macro 'BPF_CAST_CALL'
12962 | insn->imm = BPF_CAST_CALL(ops->map_peek_elem) -
| ^~~~~~~~~~~~~
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'int (* const)(struct bpf_map *, u32, u64)' {aka 'int (* const)(struct bpf_map *, unsigned int, long long unsigned int)'} to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
kernel/bpf/verifier.c:12966:17: note: in expansion of macro 'BPF_CAST_CALL'
12966 | insn->imm = BPF_CAST_CALL(ops->map_redirect) -
| ^~~~~~~~~~~~~
--
In file included from include/net/net_namespace.h:16,
from include/linux/netdevice.h:37,
from include/linux/if_vlan.h:10,
from include/linux/filter.h:21,
from kernel/bpf/hashtab.c:8:
>> include/net/netns/core.h:14:2: error: expected specifier-qualifier-list before 'unsigend'
14 | unsigend int sysctl_txrehash_mode;
| ^~~~~~~~
In file included from kernel/bpf/hashtab.c:8:
kernel/bpf/hashtab.c: In function 'htab_map_gen_lookup':
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'void * (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
include/linux/filter.h:376:14: note: in definition of macro 'BPF_EMIT_CALL'
376 | .imm = ((FUNC) - __bpf_call_base) })
| ^~~~
kernel/bpf/hashtab.c:671:26: note: in expansion of macro 'BPF_CAST_CALL'
671 | *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
| ^~~~~~~~~~~~~
kernel/bpf/hashtab.c: In function 'htab_lru_map_gen_lookup':
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'void * (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
include/linux/filter.h:376:14: note: in definition of macro 'BPF_EMIT_CALL'
376 | .imm = ((FUNC) - __bpf_call_base) })
| ^~~~
kernel/bpf/hashtab.c:712:26: note: in expansion of macro 'BPF_CAST_CALL'
712 | *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
| ^~~~~~~~~~~~~
kernel/bpf/hashtab.c: In function 'htab_of_map_gen_lookup':
include/linux/filter.h:368:4: warning: cast between incompatible function types from 'void * (*)(struct bpf_map *, void *)' to 'u64 (*)(u64, u64, u64, u64, u64)' {aka 'long long unsigned int (*)(long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int, long long unsigned int)'} [-Wcast-function-type]
368 | ((u64 (*)(u64, u64, u64, u64, u64))(x))
| ^
include/linux/filter.h:376:14: note: in definition of macro 'BPF_EMIT_CALL'
376 | .imm = ((FUNC) - __bpf_call_base) })
| ^~~~
kernel/bpf/hashtab.c:2400:26: note: in expansion of macro 'BPF_CAST_CALL'
2400 | *insn++ = BPF_EMIT_CALL(BPF_CAST_CALL(__htab_map_lookup_elem));
| ^~~~~~~~~~~~~
--
In file included from include/net/net_namespace.h:16,
from include/linux/netdevice.h:37,
from include/net/sock.h:46,
from include/linux/tcp.h:19,
from include/linux/ipv6.h:91,
from include/net/ipv6.h:12,
from kernel/bpf/lpm_trie.c:15:
>> include/net/netns/core.h:14:2: error: expected specifier-qualifier-list before 'unsigend'
14 | unsigend int sysctl_txrehash_mode;
| ^~~~~~~~
In file included from <command-line>:
include/net/sock.h: In function 'sk_rethink_txhash':
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:279:13: note: in definition of macro '__unqual_scalar_typeof'
279 | _Generic((x), \
| ^
include/asm-generic/rwonce.h:50:2: note: in expansion of macro '__READ_ONCE'
50 | __READ_ONCE(x); \
| ^~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
In file included from arch/alpha/include/asm/rwonce.h:33,
from include/linux/compiler.h:264,
from include/linux/kernel.h:11,
from include/linux/list.h:9,
from include/linux/timer.h:5,
from include/linux/workqueue.h:9,
from include/linux/bpf.h:9,
from kernel/bpf/lpm_trie.c:9:
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/asm-generic/rwonce.h:44:72: note: in definition of macro '__READ_ONCE'
44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
| ^
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
--
In file included from include/net/net_namespace.h:16,
from include/linux/netdevice.h:37,
from include/linux/if_vlan.h:10,
from include/linux/filter.h:21,
from include/linux/bpf_verifier.h:9,
from kernel/bpf/btf.c:19:
>> include/net/netns/core.h:14:2: error: expected specifier-qualifier-list before 'unsigend'
14 | unsigend int sysctl_txrehash_mode;
| ^~~~~~~~
In file included from <command-line>:
include/net/sock.h: In function 'sk_rethink_txhash':
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:21: note: in expansion of macro '__native_word'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:308:9: note: in definition of macro '__compiletime_assert'
308 | if (!(condition)) \
| ^~~~~~~~~
include/linux/compiler_types.h:328:2: note: in expansion of macro '_compiletime_assert'
328 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:36:2: note: in expansion of macro 'compiletime_assert'
36 | compiletime_assert(__native_word(t) || sizeof(t) == sizeof(long long), \
| ^~~~~~~~~~~~~~~~~~
include/asm-generic/rwonce.h:49:2: note: in expansion of macro 'compiletime_assert_rwonce_type'
49 | compiletime_assert_rwonce_type(x); \
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/linux/compiler_types.h:279:13: note: in definition of macro '__unqual_scalar_typeof'
279 | _Generic((x), \
| ^
include/asm-generic/rwonce.h:50:2: note: in expansion of macro '__READ_ONCE'
50 | __READ_ONCE(x); \
| ^~~~~~~~~~~
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
In file included from arch/alpha/include/asm/rwonce.h:33,
from include/linux/compiler.h:264,
from include/linux/ptrace.h:5,
from include/uapi/asm-generic/bpf_perf_event.h:4,
from ./arch/alpha/include/generated/uapi/asm/bpf_perf_event.h:1,
from include/uapi/linux/bpf_perf_event.h:11,
from kernel/bpf/btf.c:6:
>> include/net/sock.h:1956:44: error: 'struct netns_core' has no member named 'sysctl_txrehash_mode'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^
include/asm-generic/rwonce.h:44:72: note: in definition of macro '__READ_ONCE'
44 | #define __READ_ONCE(x) (*(const volatile __unqual_scalar_typeof(x) *)&(x))
| ^
include/net/sock.h:1956:16: note: in expansion of macro 'READ_ONCE'
1956 | rehash_mode = READ_ONCE(sock_net(sk)->core.sysctl_txrehash_mode);
| ^~~~~~~~~
kernel/bpf/btf.c: In function 'btf_seq_show':
kernel/bpf/btf.c:5748:22: warning: function 'btf_seq_show' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
5748 | seq_vprintf((struct seq_file *)show->target, fmt, args);
| ^~~~~~~~
kernel/bpf/btf.c: In function 'btf_snprintf_show':
kernel/bpf/btf.c:5785:2: warning: function 'btf_snprintf_show' might be a candidate for 'gnu_printf' format attribute [-Wsuggest-attribute=format]
5785 | len = vsnprintf(show->target, ssnprintf->len_left, fmt, args);
| ^~~
vim +/unsigend +14 include/net/netns/core.h
7
8 struct netns_core {
9 /* core sysctls */
10 struct ctl_table_header *sysctl_hdr;
11
12 int sysctl_somaxconn;
13
> 14 unsigend int sysctl_txrehash_mode;
15
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 33974 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default
2021-08-09 18:53 [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Tom Herbert
` (2 preceding siblings ...)
2021-08-09 18:53 ` [RFC PATCH net-next 3/3] txhash: Change default rethink behavior to be less aggressive Tom Herbert
@ 2021-08-09 21:56 ` Yuchung Cheng
2021-08-09 21:58 ` Yuchung Cheng
3 siblings, 1 reply; 8+ messages in thread
From: Yuchung Cheng @ 2021-08-09 21:56 UTC (permalink / raw)
To: Tom Herbert; +Cc: netdev, davem, brakmo, eric.dumazet, a.e.azimov
On Mon, Aug 9, 2021 at 11:53 AM Tom Herbert <tom@herbertland.com> wrote:
>
> Alexander Azimov performed some nice analysis of the feature in Linux
> stack where the IPv6 flow label is changed when the stack detects a
> connection is failing. The idea of the algorithm is to try to find a
> better path. His reults are quite impressive, and show that this form
> of source routing can work effectively.
>
> Alex raised an issue in that if the server endpoint is an IP anycast
> address, the connection might break if the flow label changes routing
> of packets on the connection. Anycast is known to be susceptible to
> route changes, not just those caused be flow label. The concern is that
> flow label modulation might increases the chances that anycast
> connections might break, especially if the rethink occurs after just
> one RTO which is the current behavior.
>
> This patch set makes the rethink behavior granular and configurable.
> It allows control of when to do the hash rethink: upon negative advice,
> at RTO in SYN state, at RTO when not in SYN state. The behavior can
> be configured by sysctl and by a socket option.
>
> This patch set the defautl rethink behavior to be to do a rethink only
> on negative advice. This is reverts back to the original behavior of
> the hash rethink mechanism. This less aggressive with the intent of
Thanks for offering knobs to the txhash mechanism.
Any reason why reverting the default behavior (that was changed in
2013) is necessary? systems now rely on this RTO tx-rehash to work
around link failures will now have to manually re-enable it. Some
users may have to learn from higher connection failures to eventually
identify this kernel change.
> mitigating potentail breakages when anycast addresses are present.> For those users that are benefitting from changing the hash at the
> first RTO, they would retain that behavior by setting the sysctl.
> *** BLURB HERE ***
>
> Tom Herbert (3):
> txhash: Make rethinking txhash behavior configurable via sysctl
> txhash: Add socket option to control TX hash rethink behavior
> txhash: Change default rethink behavior to be less aggressive
>
> arch/alpha/include/uapi/asm/socket.h | 2 ++
> arch/mips/include/uapi/asm/socket.h | 2 ++
> arch/parisc/include/uapi/asm/socket.h | 2 ++
> arch/sparc/include/uapi/asm/socket.h | 3 ++-
> include/net/netns/core.h | 2 ++
> include/net/sock.h | 32 +++++++++++++++++++--------
> include/uapi/asm-generic/socket.h | 2 ++
> include/uapi/linux/socket.h | 13 +++++++++++
> net/core/net_namespace.c | 4 ++++
> net/core/sock.c | 16 ++++++++++++++
> net/core/sysctl_net_core.c | 7 ++++++
> net/ipv4/tcp_input.c | 2 +-
> net/ipv4/tcp_timer.c | 5 ++++-
> 13 files changed, 80 insertions(+), 12 deletions(-)
>
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default
2021-08-09 21:56 ` [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Yuchung Cheng
@ 2021-08-09 21:58 ` Yuchung Cheng
0 siblings, 0 replies; 8+ messages in thread
From: Yuchung Cheng @ 2021-08-09 21:58 UTC (permalink / raw)
To: Tom Herbert; +Cc: netdev, davem, brakmo, eric.dumazet, a.e.azimov
On Mon, Aug 9, 2021 at 2:56 PM Yuchung Cheng <ycheng@google.com> wrote:
>
> On Mon, Aug 9, 2021 at 11:53 AM Tom Herbert <tom@herbertland.com> wrote:
> >
> > Alexander Azimov performed some nice analysis of the feature in Linux
> > stack where the IPv6 flow label is changed when the stack detects a
> > connection is failing. The idea of the algorithm is to try to find a
> > better path. His reults are quite impressive, and show that this form
> > of source routing can work effectively.
> >
> > Alex raised an issue in that if the server endpoint is an IP anycast
> > address, the connection might break if the flow label changes routing
> > of packets on the connection. Anycast is known to be susceptible to
> > route changes, not just those caused be flow label. The concern is that
> > flow label modulation might increases the chances that anycast
> > connections might break, especially if the rethink occurs after just
> > one RTO which is the current behavior.
> >
> > This patch set makes the rethink behavior granular and configurable.
> > It allows control of when to do the hash rethink: upon negative advice,
> > at RTO in SYN state, at RTO when not in SYN state. The behavior can
> > be configured by sysctl and by a socket option.
> >
> > This patch set the defautl rethink behavior to be to do a rethink only
> > on negative advice. This is reverts back to the original behavior of
> > the hash rethink mechanism. This less aggressive with the intent of
> Thanks for offering knobs to the txhash mechanism.
>
> Any reason why reverting the default behavior (that was changed in
> 2013) is necessary? systems now rely on this RTO tx-rehash to work
> around link failures will now have to manually re-enable it. Some
> users may have to learn from higher connection failures to eventually
> identify this kernel change.
Just to be clear: I agree we should offer knobs to change the txhash
behavior so the first parts of this set looks good to me. I am only
concerned about the default behavior reversal.
>
> > mitigating potentail breakages when anycast addresses are present.> For those users that are benefitting from changing the hash at the
> > first RTO, they would retain that behavior by setting the sysctl.
> > *** BLURB HERE ***
> >
> > Tom Herbert (3):
> > txhash: Make rethinking txhash behavior configurable via sysctl
> > txhash: Add socket option to control TX hash rethink behavior
> > txhash: Change default rethink behavior to be less aggressive
> >
> > arch/alpha/include/uapi/asm/socket.h | 2 ++
> > arch/mips/include/uapi/asm/socket.h | 2 ++
> > arch/parisc/include/uapi/asm/socket.h | 2 ++
> > arch/sparc/include/uapi/asm/socket.h | 3 ++-
> > include/net/netns/core.h | 2 ++
> > include/net/sock.h | 32 +++++++++++++++++++--------
> > include/uapi/asm-generic/socket.h | 2 ++
> > include/uapi/linux/socket.h | 13 +++++++++++
> > net/core/net_namespace.c | 4 ++++
> > net/core/sock.c | 16 ++++++++++++++
> > net/core/sysctl_net_core.c | 7 ++++++
> > net/ipv4/tcp_input.c | 2 +-
> > net/ipv4/tcp_timer.c | 5 ++++-
> > 13 files changed, 80 insertions(+), 12 deletions(-)
> >
> > --
> > 2.25.1
> >
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2021-08-09 21:59 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-09 18:53 [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 1/3] txhash: Make rethinking txhash behavior configurable via sysctl Tom Herbert
2021-08-09 20:20 ` kernel test robot
2021-08-09 20:39 ` kernel test robot
2021-08-09 18:53 ` [RFC PATCH net-next 2/3] txhash: Add socket option to control TX hash rethink behavior Tom Herbert
2021-08-09 18:53 ` [RFC PATCH net-next 3/3] txhash: Change default rethink behavior to be less aggressive Tom Herbert
2021-08-09 21:56 ` [RFC PATCH net-next 0/3] txhash: Make hash rethink configurable and change the default Yuchung Cheng
2021-08-09 21:58 ` Yuchung Cheng
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.