* [bpf PATCH 2/6] bpf: sockmap only allow ESTABLISHED sock state
From: John Fastabend @ 2018-06-13 17:50 UTC (permalink / raw)
To: ast, daniel; +Cc: netdev
In-Reply-To: <20180613174202.4264.59970.stgit@john-Precision-Tower-5810>
Per the note in the TLS ULP (which is actually a generic statement
regarding ULPs)
/* The TLS ulp is currently supported only for TCP sockets
* in ESTABLISHED state.
* Supporting sockets in LISTEN state will require us
* to modify the accept implementation to clone rather then
* share the ulp context.
*/
After this patch we only allow socks that are in ESTABLISHED state or
are being added via a sock_ops event that is transitioning into an
ESTABLISHED state. By allowing sock_ops events we allow users to
manage sockmaps directly from sock ops programs. The two supported
sock_ops ops are BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB and
BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB.
Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as
'netperf -H [IPv4]'.
Reported-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: John Fastabend <john.fastabend@gmail.com>
---
kernel/bpf/sockmap.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
index f6dd4cd..e5bab52 100644
--- a/kernel/bpf/sockmap.c
+++ b/kernel/bpf/sockmap.c
@@ -1976,8 +1976,12 @@ static int sock_map_update_elem(struct bpf_map *map,
return -EINVAL;
}
+ /* ULPs are currently supported only for TCP sockets in ESTABLISHED
+ * state.
+ */
if (skops.sk->sk_type != SOCK_STREAM ||
- skops.sk->sk_protocol != IPPROTO_TCP) {
+ skops.sk->sk_protocol != IPPROTO_TCP ||
+ skops.sk->sk_state != TCP_ESTABLISHED) {
fput(socket->file);
return -EOPNOTSUPP;
}
@@ -2338,6 +2342,16 @@ static int sock_hash_update_elem(struct bpf_map *map,
return -EINVAL;
}
+ /* ULPs are currently supported only for TCP sockets in ESTABLISHED
+ * state.
+ */
+ if (skops.sk->sk_type != SOCK_STREAM ||
+ skops.sk->sk_protocol != IPPROTO_TCP ||
+ skops.sk->sk_state != TCP_ESTABLISHED) {
+ fput(socket->file);
+ return -EOPNOTSUPP;
+ }
+
err = sock_hash_ctx_update_elem(&skops, map, key, flags);
fput(socket->file);
return err;
@@ -2423,10 +2437,19 @@ struct sock *__sock_hash_lookup_elem(struct bpf_map *map, void *key)
.map_delete_elem = sock_hash_delete_elem,
};
+static bool bpf_is_valid_sock(struct bpf_sock_ops_kern *ops)
+{
+ return ops->op == BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB ||
+ ops->op == BPF_SOCK_OPS_ACTIVE_ESTABLISHED_CB;
+}
+
BPF_CALL_4(bpf_sock_map_update, struct bpf_sock_ops_kern *, bpf_sock,
struct bpf_map *, map, void *, key, u64, flags)
{
WARN_ON_ONCE(!rcu_read_lock_held());
+
+ if (!bpf_is_valid_sock(bpf_sock))
+ return -EOPNOTSUPP;
return sock_map_ctx_update_elem(bpf_sock, map, key, flags);
}
@@ -2445,6 +2468,9 @@ struct sock *__sock_hash_lookup_elem(struct bpf_map *map, void *key)
struct bpf_map *, map, void *, key, u64, flags)
{
WARN_ON_ONCE(!rcu_read_lock_held());
+
+ if (!bpf_is_valid_sock(bpf_sock))
+ return -EOPNOTSUPP;
return sock_hash_ctx_update_elem(bpf_sock, map, key, flags);
}
^ permalink raw reply related
* [bpf PATCH 1/6] bpf: sockmap, fix crash when ipv6 sock is added
From: John Fastabend @ 2018-06-13 17:49 UTC (permalink / raw)
To: ast, daniel; +Cc: netdev
In-Reply-To: <20180613174202.4264.59970.stgit@john-Precision-Tower-5810>
This fixes a crash where we assign tcp_prot to IPv6 sockets instead
of tcpv6_prot.
Previously we overwrote the sk->prot field with tcp_prot even in the
AF_INET6 case. This patch ensures the correct tcp_prot and tcpv6_prot
are used. Further, only allow ESTABLISHED connections to join the
map per note in TLS ULP,
/* The TLS ulp is currently supported only for TCP sockets
* in ESTABLISHED state.
* Supporting sockets in LISTEN state will require us
* to modify the accept implementation to clone rather then
* share the ulp context.
*/
Also tested with 'netserver -6' and 'netperf -H [IPv6]' as well as
'netperf -H [IPv4]'. The ESTABLISHED check resolves the previously
crashing case here.
Fixes: 174a79ff9515 ("bpf: sockmap with sk redirect support")
Reported-by: syzbot+5c063698bdbfac19f363@syzkaller.appspotmail.com
Signed-off-by: John Fastabend <john.fastabend@gmail.com>
Signed-off-by: Wei Wang <weiwan@google.com>
---
kernel/bpf/sockmap.c | 58 +++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 48 insertions(+), 10 deletions(-)
diff --git a/kernel/bpf/sockmap.c b/kernel/bpf/sockmap.c
index 52a91d8..f6dd4cd 100644
--- a/kernel/bpf/sockmap.c
+++ b/kernel/bpf/sockmap.c
@@ -140,6 +140,7 @@ static int bpf_tcp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
static int bpf_tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size);
static int bpf_tcp_sendpage(struct sock *sk, struct page *page,
int offset, size_t size, int flags);
+static void bpf_tcp_close(struct sock *sk, long timeout);
static inline struct smap_psock *smap_psock_sk(const struct sock *sk)
{
@@ -161,7 +162,42 @@ static bool bpf_tcp_stream_read(const struct sock *sk)
return !empty;
}
-static struct proto tcp_bpf_proto;
+enum {
+ SOCKMAP_IPV4,
+ SOCKMAP_IPV6,
+ SOCKMAP_NUM_PROTS,
+};
+
+enum {
+ SOCKMAP_BASE,
+ SOCKMAP_TX,
+ SOCKMAP_NUM_CONFIGS,
+};
+
+static struct proto *saved_tcpv6_prot;
+static DEFINE_MUTEX(tcpv6_prot_mutex);
+static struct proto bpf_tcp_prots[SOCKMAP_NUM_PROTS][SOCKMAP_NUM_CONFIGS];
+static void build_protos(struct proto prot[SOCKMAP_NUM_CONFIGS],
+ struct proto *base)
+{
+ prot[SOCKMAP_BASE] = *base;
+ prot[SOCKMAP_BASE].close = bpf_tcp_close;
+ prot[SOCKMAP_BASE].recvmsg = bpf_tcp_recvmsg;
+ prot[SOCKMAP_BASE].stream_memory_read = bpf_tcp_stream_read;
+
+ prot[SOCKMAP_TX] = prot[SOCKMAP_BASE];
+ prot[SOCKMAP_TX].sendmsg = bpf_tcp_sendmsg;
+ prot[SOCKMAP_TX].sendpage = bpf_tcp_sendpage;
+}
+
+static void update_sk_prot(struct sock *sk, struct smap_psock *psock)
+{
+ int family = sk->sk_family == AF_INET6 ? SOCKMAP_IPV6 : SOCKMAP_IPV4;
+ int conf = psock->bpf_tx_msg ? SOCKMAP_TX : SOCKMAP_BASE;
+
+ sk->sk_prot = &bpf_tcp_prots[family][conf];
+}
+
static int bpf_tcp_init(struct sock *sk)
{
struct smap_psock *psock;
@@ -181,14 +217,17 @@ static int bpf_tcp_init(struct sock *sk)
psock->save_close = sk->sk_prot->close;
psock->sk_proto = sk->sk_prot;
- if (psock->bpf_tx_msg) {
- tcp_bpf_proto.sendmsg = bpf_tcp_sendmsg;
- tcp_bpf_proto.sendpage = bpf_tcp_sendpage;
- tcp_bpf_proto.recvmsg = bpf_tcp_recvmsg;
- tcp_bpf_proto.stream_memory_read = bpf_tcp_stream_read;
+ /* Build IPv6 sockmap whenever the address of tcpv6_prot changes */
+ if (sk->sk_family == AF_INET6 &&
+ unlikely(sk->sk_prot != smp_load_acquire(&saved_tcpv6_prot))) {
+ mutex_lock(&tcpv6_prot_mutex);
+ if (likely(sk->sk_prot != saved_tcpv6_prot)) {
+ build_protos(bpf_tcp_prots[SOCKMAP_IPV6], sk->sk_prot);
+ smp_store_release(&saved_tcpv6_prot, sk->sk_prot);
+ }
+ mutex_unlock(&tcpv6_prot_mutex);
}
-
- sk->sk_prot = &tcp_bpf_proto;
+ update_sk_prot(sk, psock);
rcu_read_unlock();
return 0;
}
@@ -1111,8 +1150,7 @@ static void bpf_tcp_msg_add(struct smap_psock *psock,
static int bpf_tcp_ulp_register(void)
{
- tcp_bpf_proto = tcp_prot;
- tcp_bpf_proto.close = bpf_tcp_close;
+ build_protos(bpf_tcp_prots[SOCKMAP_IPV4], &tcp_prot);
/* Once BPF TX ULP is registered it is never unregistered. It
* will be in the ULP list for the lifetime of the system. Doing
* duplicate registers is not a problem.
^ permalink raw reply related
* [bpf PATCH 0/6] BPF fixes for sockhash
From: John Fastabend @ 2018-06-13 17:49 UTC (permalink / raw)
To: ast, daniel; +Cc: netdev
This addresses two syzbot issues that lead to identifing (by Eric and
Wei) a class of bugs where we don't correctly check for IPv4/v6
sockets and their associated state. The second issue was a locking
error in sockhash.
The first 2 patches address handling IPv4 correctly and then ensuring
that only sockets in ESTABLISHED state can be added. There is then a
follow up fix (patch4) to fix the other issue Eric noted, namely that
we depend on sockets to call tcp_close to remove them from the map.
However, we missed that a socket can transition through
tcp_disconnect() and never call tcp_close() missing our hook. To
resolve this implement the unhash hook which is also called from the
tcp_disconnect() flow.
The other issue syzbot found that the tcp_close() handler missed
locking the hash bucket lock which could result in corrupting the
sockhash bucket list if delete and close ran at the same time. To
fix this we had to restructure the tcp_close() lock handling. This is
done in patch 3.
Finally, during review I noticed the release handler was ommitted
from the upstream code (patch 5) due to an incorrect merge conflict
fix when I ported the code to latest bpf-next before submitting. And
then patch 6 fixes up selftests for the above.
The tcp_disconnect() catch also appears to be missing in kTLS so
a follow up patch will need to address that as well.
---
John Fastabend (6):
bpf: sockmap, fix crash when ipv6 sock is added
bpf: sockmap only allow ESTABLISHED sock state
bpf: sockhash fix omitted bucket lock in sock_close
bpf: sockmap, tcp_disconnect to listen transition
bpf: sockhash, add release routine
bpf: selftest remove attempts to add LISTEN sockets to sockmap
kernel/bpf/sockmap.c | 266 ++++++++++++++++++++++++-------
tools/testing/selftests/bpf/test_maps.c | 4
2 files changed, 208 insertions(+), 62 deletions(-)
^ permalink raw reply
* Re: [RFC PATCH RESEND] tcp: avoid F-RTO if SACK and timestamps are disabled
From: Eric Dumazet @ 2018-06-13 17:48 UTC (permalink / raw)
To: Yuchung Cheng, Michal Kubecek
Cc: netdev, Eric Dumazet, Ilpo Jarvinen, linux-kernel
In-Reply-To: <CAK6E8=eCOLU9AX0+bSrOg_UYBm1mFxrGT=ybksba9B0OUfp7jg@mail.gmail.com>
On 06/13/2018 10:32 AM, Yuchung Cheng wrote:
> On Wed, Jun 13, 2018 at 9:55 AM, Michal Kubecek <mkubecek@suse.cz> wrote:
>>
>> When F-RTO algorithm (RFC 5682) is used on connection without both SACK and
>> timestamps (either because of (mis)configuration or because the other
>> endpoint does not advertise them), specific pattern loss can make RTO grow
>> exponentially until the sender is only able to send one packet per two
>> minutes (TCP_RTO_MAX).
>> Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
> Acked-by: Yuchung Cheng <ycheng@google.com>
>
> Thanks for the patch (and packedrill test)!
Yes, thanks a lot Michal.
Signed-off-by: Eric Dumazet <edumazet@google.com>
^ permalink raw reply
* Re: [RFC PATCH 02/12] xen/manage: introduce helper function to know the on-going suspend mode
From: Balbir Singh @ 2018-06-13 17:41 UTC (permalink / raw)
To: Anchal Agarwal
Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), boris.ostrovsky,
konrad.wilk, roger.pau, netdev, jgross, xen-devel,
linux-kernel@vger.kernel.org, kamatam, Frank van der Linden,
vallish, guruanb, eduval, Rafael J. Wysocki, Pavel Machek,
Len Brown, linux-pm, cyberax
In-Reply-To: <20180612205619.28156-3-anchalag@amazon.com>
On Wed, Jun 13, 2018 at 6:56 AM, Anchal Agarwal <anchalag@amazon.com> wrote:
> From: Munehisa Kamata <kamatam@amazon.com>
>
> Introduce simple functions which help to know the on-going suspend mode
> so that other Xen-related code can behave differently according to the
> current suspend mode.
I'd squash this patch with the previous, the previous one just left
too many open questions about how suspend mode is used. Looks like
suspend mode is a state, but I am not sure if valid transitions are
defined/checked?
Balbir Singh.
^ permalink raw reply
* Re: [RFC PATCH RESEND] tcp: avoid F-RTO if SACK and timestamps are disabled
From: Yuchung Cheng @ 2018-06-13 17:32 UTC (permalink / raw)
To: Michal Kubecek; +Cc: netdev, Eric Dumazet, Ilpo Jarvinen, linux-kernel
In-Reply-To: <20180613165543.0F92DA09E2@unicorn.suse.cz>
On Wed, Jun 13, 2018 at 9:55 AM, Michal Kubecek <mkubecek@suse.cz> wrote:
>
> When F-RTO algorithm (RFC 5682) is used on connection without both SACK and
> timestamps (either because of (mis)configuration or because the other
> endpoint does not advertise them), specific pattern loss can make RTO grow
> exponentially until the sender is only able to send one packet per two
> minutes (TCP_RTO_MAX).
>
> One way to reproduce is to
>
> - make sure the connection uses neither SACK nor timestamps
> - let tp->reorder grow enough so that lost packets are retransmitted
> after RTO (rather than when high_seq - snd_una > reorder * MSS)
> - let the data flow stabilize
> - drop multiple sender packets in "every second" pattern
> - either there is no new data to send or acks received in response to new
> data are also window updates (i.e. not dupacks by definition)
>
> In this scenario, the sender keeps cycling between retransmitting first
> lost packet (step 1 of RFC 5682), sending new data by (2b) and timing out
> again. In this loop, the sender only gets
>
> (a) acks for retransmitted segments (possibly together with old ones)
> (b) window updates
>
> Without timestamps, neither can be used for RTT estimator and without SACK,
> we have no newly sacked segments to estimate RTT either. Therefore each
> timeout doubles RTO and without usable RTT samples so that there is nothing
> to counter the exponential growth.
>
> While disabling both SACK and timestamps doesn't make any sense, the
> resulting behaviour is so pathological that it deserves an improvement.
> (Also, both can be disabled on the other side.) Avoid F-RTO algorithm in
> case both SACK and timestamps are disabled so that the sender falls back to
> traditional slow start retransmission.
>
> Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
Acked-by: Yuchung Cheng <ycheng@google.com>
Thanks for the patch (and packedrill test)! I would encourage
submitting an errata to F-RTO RFC about this case.
> ---
> net/ipv4/tcp_input.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
> index 355d3dffd021..ed603f987b72 100644
> --- a/net/ipv4/tcp_input.c
> +++ b/net/ipv4/tcp_input.c
> @@ -2001,7 +2001,8 @@ void tcp_enter_loss(struct sock *sk)
> */
> tp->frto = net->ipv4.sysctl_tcp_frto &&
> (new_recovery || icsk->icsk_retransmits) &&
> - !inet_csk(sk)->icsk_mtup.probe_size;
> + !inet_csk(sk)->icsk_mtup.probe_size &&
> + (tcp_is_sack(tp) || tp->rx_opt.tstamp_ok);
> }
>
> /* If ACK arrived pointing to a remembered SACK, it means that our
> --
> 2.17.1
>
^ permalink raw reply
* WARNING: refcount bug in smap_release_sock
From: syzbot @ 2018-06-13 17:32 UTC (permalink / raw)
To: ast, daniel, linux-kernel, netdev, syzkaller-bugs
Hello,
syzbot found the following crash on:
HEAD commit: 75d4e704fa8d netdev-FAQ: clarify DaveM's position for stab..
git tree: bpf-next
console output: https://syzkaller.appspot.com/x/log.txt?x=17cbfeaf800000
kernel config: https://syzkaller.appspot.com/x/.config?x=a601a80fec461d44
dashboard link: https://syzkaller.appspot.com/bug?extid=d464d2c20c717ef5a6a8
compiler: gcc (GCC) 8.0.1 20180413 (experimental)
Unfortunately, I don't have any reproducer for this crash yet.
IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: syzbot+d464d2c20c717ef5a6a8@syzkaller.appspotmail.com
------------[ cut here ]------------
refcount_t: underflow; use-after-free.
WARNING: CPU: 0 PID: 24475 at lib/refcount.c:187
refcount_sub_and_test+0x2d3/0x330 lib/refcount.c:187
Kernel panic - not syncing: panic_on_warn set ...
CPU: 0 PID: 24475 Comm: syz-executor2 Not tainted 4.17.0-rc7+ #38
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1b9/0x294 lib/dump_stack.c:113
panic+0x22f/0x4de kernel/panic.c:184
__warn.cold.8+0x163/0x1b3 kernel/panic.c:536
report_bug+0x252/0x2d0 lib/bug.c:186
fixup_bug arch/x86/kernel/traps.c:178 [inline]
do_error_trap+0x1de/0x490 arch/x86/kernel/traps.c:296
do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:315
invalid_op+0x14/0x20 arch/x86/entry/entry_64.S:992
RIP: 0010:refcount_sub_and_test+0x2d3/0x330 lib/refcount.c:187
RSP: 0018:ffff8801c864f800 EFLAGS: 00010282
RAX: 0000000000000026 RBX: 0000000000000000 RCX: ffffc90003c0b000
RDX: 0000000000003662 RSI: ffffffff8160fbe1 RDI: ffff8801c864f360
RBP: ffff8801c864f8e8 R08: ffff880196a0a040 R09: 0000000000000006
R10: 0000000000000000 R11: 0000000000000000 R12: 00000000ffffffff
R13: ffff8801c864f8c0 R14: 0000000000000001 R15: ffff8801ba9cea00
refcount_dec_and_test+0x1a/0x20 lib/refcount.c:212
smap_release_sock+0x6e/0x2f0 kernel/bpf/sockmap.c:1358
sock_hash_ctx_update_elem.isra.23+0x896/0x1560 kernel/bpf/sockmap.c:2281
sock_hash_update_elem+0x14f/0x2d0 kernel/bpf/sockmap.c:2303
map_update_elem+0x5c4/0xc90 kernel/bpf/syscall.c:765
__do_sys_bpf kernel/bpf/syscall.c:2357 [inline]
__se_sys_bpf kernel/bpf/syscall.c:2328 [inline]
__x64_sys_bpf+0x32d/0x510 kernel/bpf/syscall.c:2328
do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x455b29
RSP: 002b:00007f097e0d7c68 EFLAGS: 00000246 ORIG_RAX: 0000000000000141
RAX: ffffffffffffffda RBX: 00007f097e0d86d4 RCX: 0000000000455b29
RDX: 0000000000000020 RSI: 0000000020000180 RDI: 0000000000000002
RBP: 000000000072bf50 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
R13: 00000000004bb81b R14: 00000000004c8110 R15: 0000000000000001
Dumping ftrace buffer:
---------------------------------
syz-exec-14028 0...2 137035717us : 0: }D
syz-exec-14028 0...2 137035726us : 0: }D
syz-exec-14028 0...2 137035729us : 0: }D
syz-exec-14028 0...2 137035732us : 0: }D
syz-exec-14028 0...2 137035734us : 0: }D
syz-exec-14028 0...2 137035737us : 0: }D
syz-exec-14028 0...2 137035740us : 0: }D
syz-exec-14028 0...2 137035744us : 0: }D
syz-exec-14028 0...2 137035748us : 0: }D
syz-exec-14028 0...2 137035751us : 0: }D
syz-exec-14028 0...2 137035755us : 0: }D
syz-exec-14028 0...2 137035759us : 0: }D
syz-exec-14028 0...2 137035763us : 0: }D
syz-exec-14028 0...2 137035767us : 0: }D
syz-exec-14028 0...2 137035770us : 0: }D
syz-exec-14028 0...2 137035774us : 0: }D
syz-exec-14028 0...2 137035777us : 0: }D
syz-exec-14028 0...2 137035781us : 0: }D
syz-exec-14028 0...2 137035785us : 0: }D
syz-exec-14028 0...2 137035788us : 0: }D
syz-exec-14028 0...2 137035791us : 0: }D
syz-exec-14028 0...2 137035795us : 0: }D
syz-exec-14028 0...2 137035799us : 0: }D
syz-exec-14028 0...2 137035802us : 0: }D
syz-exec-14028 0...2 137035806us : 0: }D
syz-exec-14028 0...2 137035810us : 0: }D
syz-exec-14028 0...2 137035813us : 0: }D
syz-exec-14028 0...2 137035817us : 0: }D
syz-exec-14028 0...2 137035821us : 0: }D
syz-exec-14028 0...2 137035824us : 0: }D
syz-exec-14028 0...2 137035826us : 0: }D
syz-exec-14028 0...2 137035829us : 0: }D
syz-exec-14028 0...2 137035832us : 0: }D
syz-exec-14028 0...2 137035834us : 0: }D
syz-exec-14028 0...2 137035837us : 0: }D
syz-exec-14028 0...2 137035839us : 0: }D
syz-exec-14028 0...2 137035842us : 0: }D
syz-exec-14028 0...2 137035844us : 0: }D
syz-exec-14028 0...2 137035847us : 0: }D
syz-exec-14028 0...2 137035849us : 0: }D
syz-exec-14028 0...2 137035852us : 0: }D
syz-exec-14028 0...2 137035855us : 0: }D
syz-exec-14028 0...2 137035857us : 0: }D
syz-exec-14028 0...2 137035860us : 0: }D
syz-exec-14028 0...2 137035862us : 0: }D
syz-exec-14028 0...2 137035865us : 0: }D
syz-exec-14028 0...2 137035867us : 0: }D
syz-exec-14028 0...2 137035870us : 0: }D
syz-exec-14028 0...2 137035874us : 0: }D
syz-exec-14028 0...2 137035876us : 0: }D
syz-exec-14028 0...2 137035879us : 0: }D
syz-exec-14028 0...2 137035882us : 0: }D
syz-exec-14028 0...2 137035885us : 0: }D
syz-exec-14028 0...2 137035888us : 0: }D
syz-exec-14028 0...2 137035891us : 0: }D
syz-exec-14028 0...2 137035894us : 0: }D
syz-exec-14028 0...2 137035897us : 0: }D
syz-exec-14028 0...2 137035900us : 0: }D
syz-exec-14028 0...2 137035902us : 0: }D
syz-exec-14028 0...2 137035905us : 0: }D
syz-exec-14028 0...2 137035908us : 0: }D
syz-exec-14028 0...2 137035911us : 0: }D
syz-exec-14028 0...2 137035914us : 0: }D
syz-exec-14028 0...2 137035917us : 0: }D
syz-exec-14028 0...2 137035921us : 0: }D
syz-exec-14028 0...2 137035923us : 0: }D
syz-exec-14028 0...2 137035926us : 0: }D
syz-exec-14028 0...2 137035929us : 0: }D
syz-exec-14028 0...2 137035932us : 0: }D
syz-exec-14028 0...2 137035935us : 0: }D
syz-exec-14028 0...2 137035938us : 0: }D
syz-exec-14028 0...2 137035941us : 0: }D
syz-exec-14028 0...2 137035944us : 0: }D
syz-exec-14028 0...2 137035947us : 0: }D
syz-exec-14028 0...2 137035950us : 0: }D
syz-exec-14028 0...2 137035953us : 0: }D
syz-exec-14028 0...2 137035956us : 0: }D
syz-exec-14028 0...2 137035959us : 0: }D
syz-exec-14028 0...2 137035962us : 0: }D
syz-exec-14028 0...2 137035965us : 0: }D
syz-exec-14028 0...2 137035968us : 0: }D
syz-exec-14028 0...2 137035971us : 0: }D
syz-exec-14028 0...2 137035974us : 0: }D
syz-exec-14028 0...2 137035977us : 0: }D
syz-exec-14028 0...2 137035979us : 0: }D
syz-exec-14028 0...2 137035983us : 0: }D
syz-exec-14028 0...2 137035986us : 0: }D
syz-exec-14028 0...2 137035989us : 0: }D
syz-exec-14028 0...2 137035992us : 0: }D
syz-exec-14028 0...2 137035995us : 0: }D
syz-exec-14028 0...2 137035997us : 0: }D
syz-exec-14028 0...2 137036000us : 0: }D
syz-exec-14028 0...2 137036003us : 0: }D
syz-exec-14028 0...2 137036006us : 0: }D
syz-exec-14028 0...2 137036009us : 0: }D
syz-exec-14028 0...2 137036013us : 0: }D
syz-exec-14028 0...2 137036016us : 0: }D
syz-exec-14028 0...2 137036019us : 0: }D
syz-exec-14028 0...2 137036022us : 0: }D
syz-exec-14028 0...2 137036025us : 0: }D
syz-exec-14028 0...2 137036028us : 0: }D
syz-exec-14028 0...2 137036031us : 0: }D
syz-exec-14028 0...2 137036034us : 0: }D
syz-exec-14028 0...2 137036036us : 0: }D
syz-exec-14028 0...2 137036039us : 0: }D
syz-exec-14028 0...2 137036042us : 0: }D
syz-exec-14028 0...2 137036045us : 0: }D
syz-exec-14028 0...2 137036048us : 0: }D
syz-exec-14028 0...2 137036051us : 0: }D
syz-exec-14028 0...2 137036054us : 0: }D
syz-exec-14028 0...2 137036057us : 0: }D
syz-exec-14028 0...2 137036060us : 0: }D
syz-exec-14028 0...2 137036063us : 0: }D
syz-exec-14028 0...2 137036067us : 0: }D
syz-exec-14028 0...2 137036070us : 0: }D
syz-exec-14028 0...2 137036072us : 0: }D
syz-exec-14028 0...2 137036075us : 0: }D
syz-exec-14028 0...2 137036078us : 0: }D
syz-exec-14028 0...2 137036081us : 0: }D
syz-exec-14028 0...2 137036084us : 0: }D
syz-exec-14028 0...2 137036087us : 0: }D
syz-exec-14028 0...2 137036090us : 0: }D
syz-exec-14028 0...2 137036093us : 0: }D
syz-exec-14028 0...2 137036096us : 0: }D
syz-exec-14028 0...2 137036099us : 0: }D
syz-exec-14028 0...2 137036102us : 0: }D
syz-exec-14028 0...2 137036106us : 0: }D
syz-exec-14028 0...2 137036109us : 0: }D
syz-exec-14028 0...2 137036112us : 0: }D
syz-exec-14028 0...2 137036115us : 0: }D
syz-exec-14028 0...2 137036118us : 0: }D
syz-exec-14028 0...2 137036121us : 0: }D
syz-exec-14028 0...2 137036124us : 0: }D
syz-exec-14028 0...2 137036127us : 0: }D
syz-exec-14028 0...2 137036130us : 0: }D
syz-exec-14028 0...2 137036133us : 0: }D
syz-exec-14028 0...2 137036136us : 0: }D
syz-exec-14028 0...2 137036139us : 0: }D
syz-exec-14028 0...2 137036142us : 0: }D
syz-exec-14028 0...2 137036145us : 0: }D
syz-exec-14028 0...2 137036148us : 0: }D
syz-exec-14028 0...2 137036151us : 0: }D
syz-exec-14028 0...2 137036154us : 0: }D
syz-exec-14028 0...2 137036157us : 0: }D
syz-exec-14028 0...2 137036165us : 0: }D
syz-exec-14028 0...2 137036168us : 0: }D
syz-exec-14028 0...2 137036172us : 0: }D
syz-exec-14028 0...2 137036175us : 0: }D
syz-exec-14028 0...2 137036178us : 0: }D
syz-exec-14028 0...2 137036181us : 0: }D
syz-exec-14028 0...2 137036184us : 0: }D
syz-exec-14028 0...2 137036187us : 0: }D
syz-exec-14028 0...2 137036190us : 0: }D
syz-exec-14028 0...2 137036194us : 0: }D
syz-exec-14028 0...2 137036197us : 0: }D
syz-exec-14028 0...2 137036200us : 0: }D
syz-exec-14028 0...2 137036203us : 0: }D
syz-exec-14028 0...2 137036207us : 0: }D
syz-exec-14028 0...2 137036210us : 0: }D
syz-exec-14028 0...2 137036213us : 0: }D
syz-exec-14028 0...2 137036216us : 0: }D
syz-exec-14028 0...2 137036219us : 0: }D
syz-exec-14028 0...2 137036222us : 0: }D
syz-exec-14028 0...2 137036225us : 0: }D
syz-exec-14028 0...2 137036229us : 0: }D
syz-exec-14028 0.N.2 137036482us : 0: }D
syz-exec-14028 0...2 137039870us : 0: }D
syz-exec-14028 0...2 137039876us : 0: }D
syz-exec-14028 0...2 137039879us : 0: }D
syz-exec-14028 0...2 137039885us : 0: }D
syz-exec-14028 0...2 137039889us : 0: }D
syz-exec-14028 0...2 137039892us : 0: }D
syz-exec-14028 0...2 137039895us : 0: }D
syz-exec-14028 0...2 137039898us : 0: }D
syz-exec-14028 0...2 137039902us : 0: }D
syz-exec-14028 0...2 137039905us : 0: }D
syz-exec-14028 0...2 137039908us : 0: }D
syz-exec-14028 0...2 137039910us : 0: }D
syz-exec-14028 0...2 137039915us : 0: }D
syz-exec-14028 0...2 137039917us : 0: }D
syz-exec-14028 0...2 137039920us : 0: }D
syz-exec-14028 0...2 137039924us : 0: }D
syz-exec-14028 0...2 137039927us : 0: }D
syz-exec-14028 0...2 137039930us : 0: }D
syz-exec-14028 0...2 137039933us : 0: }D
syz-exec-14028 0...2 137039936us : 0: }D
syz-exec-14028 0...2 137039939us : 0: }D
syz-exec-14028 0...2 137039942us : 0: }D
syz-exec-14028 0...2 137039945us : 0: }D
syz-exec-14028 0...2 137039948us : 0: }D
syz-exec-14028 0...2 137039951us : 0: }D
syz-exec-14028 0...2 137039954us : 0: }D
syz-exec-14028 0...2 137039958us : 0: }D
syz-exec-14028 0...2 137039961us : 0: }D
syz-exec-14028 0...2 137039963us : 0: }D
syz-exec-14028 0...2 137039966us : 0: }D
syz-exec-14028 0...2 137039970us : 0: }D
syz-exec-14028 0...2 137039973us : 0: }D
syz-exec-14028 0...2 137039976us : 0: }D
syz-exec-14028 0...2 137039980us : 0: }D
syz-exec-14028 0...2 137039984us : 0: }D
syz-exec-14028 0...2 137039987us : 0: }D
syz-exec-14028 0...2 137039990us : 0: }D
syz-exec-14028 0...2 137039993us : 0: }D
syz-exec-14028 0...2 137039996us : 0: }D
syz-exec-14028 0...2 137039999us : 0: }D
syz-exec-14028 0...2 137040002us : 0: }D
syz-exec-14028 0...2 137040006us : 0: }D
syz-exec-14028 0...2 137040009us : 0: }D
syz-exec-14028 0...2 137040012us : 0: }D
syz-exec-14028 0...2 137040016us : 0: }D
syz-exec-14028 0...2 137040019us : 0: }D
syz-exec-14028 0...2 137040022us : 0: }D
syz-exec-14028 0...2 137040025us : 0: }D
syz-exec-14028 0...2 137040028us : 0: }D
syz-exec-14028 0...2 137040032us : 0: }D
syz-exec-14028 0...2 137040035us : 0: }D
syz-exec-14028 0...2 137040038us : 0: }D
syz-exec-14028 0...2 137040041us : 0: }D
syz-exec-14028 0...2 137040044us : 0: }D
syz-exec-14028 0...2 137040047us : 0: }D
syz-exec-14028 0...2 137040050us : 0: }D
syz-exec-14028 0...2 137040053us : 0: }D
syz-exec-14028 0...2 137040056us : 0: }D
syz-exec-14028 0...2 137040059us : 0: }D
syz-exec-14028 0...2 137040062us : 0: }D
syz-exec-14028 0...2 137040065us : 0: }D
syz-exec-14028 0...2 137040068us : 0: }D
syz-exec-14028 0...2 137040071us : 0: }D
syz-exec-14028 0...2 137040074us : 0: }D
syz-exec-14028 0...2 137040077us : 0: }D
syz-exec-14028 0...2 137040080us : 0: }D
syz-exec-14028 0...2 137040083us : 0: }D
syz-exec-14028 0...2 137040087us : 0: }D
syz-exec-14028 0...2 137040090us : 0: }D
syz-exec-14028 0...2 137040093us : 0: }D
syz-exec-14028 0...2 137040096us : 0: }D
syz-exec-14028 0...2 137040099us : 0: }D
syz-exec-14028 0...2 137040102us : 0: }D
syz-exec-14028 0...2 137040105us : 0: }D
syz-exec-14028 0...2 137040108us : 0: }D
syz-exec-14028 0...2 137040111us : 0: }D
syz-exec-14028 0...2 137040114us : 0: }D
syz-exec-14028 0...2 137040117us : 0: }D
syz-exec-14028 0...2 137040119us : 0: }D
syz-exec-14028 0...2 137040122us : 0: }D
syz-exec-14028 0...2 137040125us : 0: }D
syz-exec-14028 0...2 137040129us : 0: }D
syz-exec-14028 0...2 137040132us : 0: }D
syz-exec-14028 0...2 137040135us : 0: }D
syz-exec-14028 0...2 137040138us : 0: }D
syz-exec-14028 0...2 137040141us : 0: }D
syz-exec-14028 0...2 137040144us : 0: }D
syz-exec-14028 0...2 137040147us : 0: }D
syz-exec-14028 0...2 137040150us : 0: }D
syz-exec-14028 0...2 137040153us : 0: }D
syz-exec-14028 0...2 137040156us : 0: }D
syz-exec-14028 0...2 137040159us : 0: }D
syz-exec-14028 0...2 137040168us : 0: }D
syz-exec-14028 0...2 137040171us : 0: }D
syz-exec-14028 0...2 137040174us : 0: }D
syz-exec-14028 0...2 137040177us : 0: }D
syz-exec-14028 0...2 137040180us : 0: }D
syz-exec-14028 0...2 137040183us : 0: }D
syz-exec-14028 0...2 137040186us : 0: }D
syz-exec-14028 0...2 137040189us : 0: }D
syz-exec-14028 0...2 137040192us : 0: }D
syz-exec-14028 0...2 137040195us : 0: }D
syz-exec-14028 0...2 137040197us : 0: }D
syz-exec-14028 0...2 137040200us : 0: }D
syz-exec-14028 0...2 137040203us : 0: }D
syz-exec-14028 0...2 137040207us : 0: }D
syz-exec-14028 0...2 137040209us : 0: }D
syz-exec-14028 0...2 137040213us : 0: }D
syz-exec-14028 0...2 137040216us : 0: }D
syz-exec-14028 0...2 137040219us : 0: }D
syz-exec-14028 0...2 137040221us : 0: }D
syz-exec-14028 0...2 137040224us : 0: }D
syz-exec-14028 0...2 137040227us : 0: }D
syz-exec-14028 0...2 137040230us : 0: }D
syz-exec-14028 0...2 137042704us : 0: }D
syz-exec-14028 0...2 137042709us : 0: }D
syz-exec-14028 0...2 137042713us : 0: }D
syz-exec-14028 0...2 137042715us : 0: }D
syz-exec-14028 0...2 137042717us : 0: }D
syz-exec-14028 0...2 137042720us : 0: }D
syz-exec-14028 0...2 137042724us : 0: }D
syz-exec-14028 0...2 137042727us : 0: }D
syz-exec-14028 0...2 137042729us : 0: }D
syz-exec-14028 0...2 137042733us : 0: }D
syz-exec-14028 0...2 137042736us : 0: }D
syz-exec-14028 0...2 137042739us : 0: }D
syz-exec-14028 0...2 137042741us : 0: }D
syz-exec-14028 0...2 137042746us : 0: }D
syz-exec-14028 0...2 137042748us : 0: }D
syz-exec-14028 0...2 137042751us : 0: }D
syz-exec-14028 0...2 137042755us : 0: }D
syz-exec-14028 0...2 137042758us : 0: }D
syz-exec-14028 0...2 137042760us : 0: }D
syz-exec-14028 0...2 137042763us : 0: }D
syz-exec-14028 0...2 137042766us : 0: }D
syz-exec-14028 0...2 137042769us : 0: }D
syz-exec-14028 0...2 137042771us : 0: }D
syz-exec-14028 0...2 137042774us : 0: }D
syz-exec-14028 0...2 137042777us : 0: }D
syz-exec-14028 0...2 137042780us : 0: }D
syz-exec-14028 0...2 137042782us : 0: }D
syz-exec-14028 0...2 137042784us : 0: }D
syz-exec-14028 0...2 137042787us : 0: }D
syz-exec-14028 0...2 137042789us : 0: }D
syz-exec-14028 0...2 137042792us : 0: }D
syz-exec-14028 0...2 137042795us : 0: }D
syz-exec-14028 0...2 137042798us : 0: }D
syz-exec-14028 0...2 137042800us : 0: }D
syz-exec-14028 0...2 137042803us : 0: }D
syz-exec-14028 0...2 137042806us : 0: }D
syz-exec-14028 0...2 137042809us : 0: }D
syz-exec-14028 0...2 137042811us : 0: }D
syz-exec-14028 0...2 137042814us : 0: }D
syz-exec-14028 0...2 137042816us : 0: }D
syz-exec-14028 0...2 137042819us : 0: }D
syz-exec-14028 0...2 137042822us : 0: }D
syz-exec-14028 0...2 137042824us : 0: }D
syz-exec-14028 0...2 137042826us : 0: }D
syz-exec-14028 0...2 137042828us : 0: }D
syz-exec-14028 0...2 137042831us : 0: }D
syz-exec-14028 0...2 137042833us : 0: }D
syz-exec-14028 0...2 137042835us : 0: }D
syz-exec-14028 0...2 137042838us : 0: }D
syz-exec-14028 0...2 137042841us : 0: }D
syz-exec-14028 0...2 137042844us : 0: }D
syz-exec-14028 0...2 137042846us : 0: }D
syz-exec-14028 0...2 137042849us : 0: }D
syz-exec-14028 0...2 137042851us : 0: }D
syz-exec-14028 0...2 137042854us : 0: }D
syz-exec-14028 0...2 137042857us : 0: }D
syz-exec-14028 0...2 137042860us : 0: }D
syz-exec-14028 0...2 137042862us : 0: }D
syz-exec-14028 0...2 137042865us : 0: }D
syz-exec-14028 0...2 137042870us : 0: }D
syz-exec-14028 0...2 137042873us : 0: }D
syz-exec-14028 0...2 137042876us : 0: }D
syz-exec-14028 0...2 137042878us : 0: }D
syz-exec-14028 0...2 137042881us : 0: }D
syz-exec-14028 0...2 137042883us : 0: }D
syz-exec-14028 0...2 137042886us : 0: }D
syz-exec-14028 0...2 137042889us : 0: }D
syz-exec-14028 0...2 137042892us : 0: }D
syz-exec-14028 0...2 137042894us : 0: }D
syz-exec-14028 0...2 137042897us : 0: }D
syz-exec-14028 0...2 137042900us : 0: }D
syz-exec-14028 0...2 137042903us : 0: }D
syz-exec-14028 0...2 137042906us : 0: }D
syz-exec-14028 0...2 137042909us : 0: }D
syz-exec-14028 0...2 137042911us : 0: }D
syz-exec-14028 0...2 137042914us : 0: }D
syz-exec-14028 0...2 137042917us : 0: }D
syz-exec-14028 0...2 137042920us : 0: }D
syz-exec-14028 0...2 137042923us : 0: }D
syz-exec-14028 0...2 137042926us : 0: }D
syz-exec-14028 0...2 137042929us : 0: }D
syz-exec-14028 0...2 137042932us : 0: }D
syz-exec-14028 0...2 137042935us : 0: }D
syz-exec-14028 0...2 137042938us : 0: }D
syz-exec-14028 0...2 137042941us : 0: }D
syz-exec-14028 0...2 137042944us : 0: }D
syz-exec-14028 0...2 137042947us : 0: }D
syz-exec-14028 0...2 137042950us : 0: }D
syz-exec-14028 0...2 137042953us : 0: }D
syz-exec-14028 0...2 137042955us : 0: }D
syz-exec-14028 0...2 137042958us : 0: }D
syz-exec-14028 0...2 137042961us : 0: }D
syz-exec-14028 0...2 137042964us : 0: }D
syz-exec-14028 0...2 137042966us : 0: }D
syz-exec-14028 0...2 137042969us : 0: }D
syz-exec-14028 0...2 137042971us : 0: }D
syz-exec-14028 0...2 137042973us : 0: }D
syz-exec-14028 0...2 137042976us : 0: }D
syz-exec-14028 0...2 137042978us : 0: }D
syz-exec-14028 0...2 137042981us : 0: }D
syz-exec-14028 0...2 137042984us : 0: }D
syz-exec-14028 0...2 137042987us : 0: }D
syz-exec-14028 0...2 137042990us : 0: }D
syz-exec-14028 0...2 137042993us : 0: }D
syz-exec-14028 0...2 137042996us : 0: }D
syz-exec-14028 0...2 137042999us : 0: }D
syz-exec-14028 0...2 137043002us : 0: }D
syz-exec-14028 0...2 137043004us : 0: }D
syz-exec-14028 0...2 137043007us : 0: }D
syz-exec-14028 0...2 137043010us : 0: }D
syz-exec-14028 0...2 137043013us : 0: }D
syz-exec-14028 0...2 137043016us : 0: }D
syz-exec-14028 0...2 137043019us : 0: }D
syz-exec-14028 0...2 137043022us : 0: }D
syz-exec-14028 0...2 137043025us : 0: }D
syz-exec-14028 0...2 137043028us : 0: }D
syz-exec-14028 0...2 137043031us : 0: }D
syz-exec-14028 0...2 137043034us : 0: }D
syz-exec-14028 0...2 137043037us : 0: }D
syz-exec-14028 0...2 137043040us : 0: }D
syz-exec-14028 0...2 137043043us : 0: }D
syz-exec-14028 0...2 137043046us : 0: }D
syz-exec-14028 0...2 137043049us : 0: }D
syz-exec-14028 0...2 137043052us : 0: }D
syz-exec-14028 0...2 137043055us : 0: }D
syz-exec-14028 0...2 137043058us : 0: }D
syz-exec-14028 0...2 137043061us : 0: }D
syz-exec-14028 0...2 137043064us : 0: }D
syz-exec-14028 0...2 137043067us : 0: }D
syz-exec-14028 0...2 137043070us : 0: }D
syz-exec-14028 0...2 137043073us : 0: }D
syz-exec-14028 0...2 137043076us : 0: }D
syz-exec-14028 0...2 137043079us : 0: }D
syz-exec-14028 0...2 137043082us : 0: }D
syz-exec-14028 0...2 137043085us : 0: }D
syz-exec-14028 0...2 137043088us : 0: }D
syz-exec-14028 0...2 137043090us : 0: }D
syz-exec-14028 0...2 137043093us : 0: }D
syz-exec-14028 0...2 137043096us : 0: }D
syz-exec-14028 0...2 137043099us : 0: }D
syz-exec-14028 0...2 137043102us : 0: }D
syz-exec-14028 0...2 137043105us : 0: }D
syz-exec-14028 0...2 137043108us : 0: }D
syz-exec-14028 0...2 137043111us : 0: }D
syz-exec-14028 0...2 137043114us : 0: }D
syz-exec-14028 0...2 137043116us : 0: }D
syz-exec-14028 0...2 137043119us : 0: }D
syz-exec-14028 0...2 137043122us : 0: }D
syz-exec-14028 0...2 137043125us : 0: }D
syz-exec-14028 0...2 137043128us : 0: }D
syz-exec-14028 0...2 137043131us : 0: }D
syz-exec-14028 0...2 137043134us : 0: }D
syz-exec-14028 0...2 137043137us : 0: }D
syz-exec-14028 0...2 137043140us : 0: }D
syz-exec-14028 0...2 137043143us : 0: }D
syz-exec-14028 0...2 137043146us : 0: }D
syz-exec-14028 0...2 137043149us : 0: }D
syz-exec-14028 0...2 137043152us : 0: }D
syz-exec-14028 0...2 137043155us : 0: }D
syz-exec-14028 0...2 137043158us : 0: }D
syz-exec-14028 0...2 137043168us : 0: }D
syz-exec-14028 0...2 137043171us : 0: }D
syz-exec-14028 0...2 137043174us : 0: }D
syz-exec-14028 0...2 137043177us : 0: }D
syz-exec-14028 0...2 137043180us : 0: }D
syz-exec-14028 0...2 137043183us : 0: }D
syz-exec-14028 0...2 137043186us : 0: }D
syz-exec-14028 0...2 137043189us : 0: }D
syz-exec-14028 0...2 137043192us : 0: }D
syz-exec-14028 0...2 137043195us : 0: }D
syz-exec-14028 0...2 137043198us : 0: }D
syz-exec-14028 0...2 137043202us : 0: }D
syz-exec-14028 0...2 137043205us : 0: }D
syz-exec-14028 0...2 137043207us : 0: }D
syz-exec-14028 0...2 137043210us : 0: }D
syz-exec-14028 0...2 137043214us : 0: }D
syz-exec-14028 0...2 137043216us : 0: }D
syz-exec-14028 0...2 137043219us : 0: }D
syz-exec-14028 0...2 137043222us : 0: }D
syz-exec-14028 0...2 137043225us : 0: }D
syz-exec-14028 0...2 137043228us : 0: }D
syz-exec-14028 0...2 137043231us : 0: }D
syz-exec-14028 0...2 137043267us : 0: }D
syz-exec-14028 0...2 137043270us : 0: }D
syz-exec-14028 0...2 137043273us : 0: }D
syz-exec-14028 0.N.2 137043280us : 0: }D
syz-exec-14028 0...2 137045368us : 0: }D
syz-exec-14028 0...2 137045373us : 0: }D
syz-exec-14028 0...2 137045378us : 0: }D
syz-exec-14028 0...2 137045381us : 0: }D
syz-exec-14028 0...2 137045384us : 0: }D
syz-exec-14028 0...2 137045387us : 0: }D
syz-exec-14028 0...2 137045391us : 0: }D
syz-exec-14028 0...2 137045394us : 0: }D
syz-exec-14028 0...2 137045397us : 0: }D
syz-exec-14028 0...2 137045400us : 0: }D
syz-exec-14028 0...2 137045404us : 0: }D
syz-exec-14028 0...2 137045407us : 0: }D
syz-exec-14028 0...2 137045410us : 0: }D
syz-exec-14028 0...2 137045413us : 0: }D
syz-exec-14028 0...2 137045417us : 0: }D
syz-exec-14028 0...2 137045420us : 0: }D
syz-exec-14028 0...2 137045423us : 0: }D
syz-exec-14028 0...2 137045426us : 0: }D
syz-exec-14028 0...2 137045429us : 0: }D
syz-exec-14028 0...2 137045432us : 0: }D
syz-exec-14028 0...2 137045436us : 0: }D
syz-exec-14028 0...2 137045439us : 0: }D
syz-exec-14028 0...2 137045443us : 0: }D
syz-exec-14028 0...2 137045446us : 0: }D
syz-exec-14028 0...2 137045449us : 0: }D
syz-exec-14028 0...2 137045452us : 0: }D
syz-exec-14028 0...2 137045455us : 0: }D
syz-exec-14028 0...2 137045458us : 0: }D
syz-exec-14028 0...2 137045462us : 0: }D
syz-exec-14028 0...2 137045465us : 0: }D
syz-exec-14028 0...2 137045468us : 0: }D
syz-exec-14028 0...2 137045472us : 0: }D
syz-exec-14028 0...2 137045475us : 0: }D
syz-exec-14028 0...2 137045478us : 0: }D
syz-exec-14028 0...2 137045481us : 0: }D
syz-exec-14028 0...2 137045485us : 0: }D
syz-exec-14028 0...2 137045488us : 0: }D
syz-exec-14028 0...2 137045491us : 0: }D
syz-exec-14028 0...2 137045494us : 0: }D
syz-exec-14028 0...2 137045498us : 0: }D
syz-exec-14028 0...2 137045501us : 0: }D
syz-exec-14028 0...2 137045504us : 0: }D
syz-exec-14028 0...2 137045508us : 0: }D
syz-exec-14028 0...2 137045513us : 0: }D
syz-exec-14028 0...2 137045516us : 0: }D
syz-exec-14028 0...2 137045519us : 0: }D
syz-exec-14028 0...2 137045522us : 0: }D
syz-exec-14028 0...2 137045525us : 0: }D
syz-exec-14028 0...2 137045528us : 0: }D
syz-exec-14028 0...2 137045531us : 0: }D
syz-exec-14028 0...2 137045534us : 0: }D
syz-exec-14028 0...2 137045537us : 0: }D
syz-exec-14028 0...2 137045540us : 0: }D
syz-exec-14028 0...2 137045543us : 0: }D
syz-exec-14028 0...2 137045546us : 0: }D
syz-exec-14028 0...2 137045549us : 0: }D
syz-exec-14028 0...2 137045552us : 0: }D
syz-exec-14028 0...2 137045555us : 0: }D
syz-exec-14028 0...2 137045559us : 0: }D
syz-exec-14028 0...2 137045562us : 0: }D
syz-exec-14028 0...2 137045565us : 0: }D
syz-exec-14028 0...2 137045568us : 0: }D
syz-exec-14028 0...2 137045571us : 0: }D
syz-exec-14028 0...2 137045574us : 0: }D
syz-exec-14028 0...2 137045577us : 0: }D
syz-exec-14028 0...2 137045580us : 0: }D
syz-exec-14028 0...2 137045583us : 0: }D
syz-exec-14028 0...2 137045586us : 0: }D
syz-exec-14028 0...2 137045589us : 0: }D
syz-exec-14028 0...2 137045592us : 0: }D
syz-exec-14028 0...2 137045596us : 0: }D
syz-exec-14028 0...2 137045662us : 0: }D
syz-exec-14028 0...2 137045665us : 0: }D
syz-exec-14028 0...2 137045669us : 0: }D
syz-exec-14028 0...2 137045672us : 0: }D
syz-exec-14028 0...2 137045675us : 0: }D
syz-exec-14028 0...2 137045678us : 0: }D
syz-exec-14028 0...2 137045682us : 0: }D
syz-exec-14028 0...2 137045685us : 0: }D
syz-exec-14028 0...2 137045688us : 0: }D
syz-exec-14028 0...2 137045691us : 0: }D
syz-exec-14028 0...2 137045694us : 0: }D
syz-exec-14028 0...2 137045697us : 0: }D
syz-exec-14028 0...2 137045700us : 0: }D
syz-exec-14028 0...2 137045703us : 0: }D
syz-exec-14028 0...2 137045707us : 0: }D
syz-exec-14028 0...2 137045710us : 0: }D
syz-exec-14028 0...2 137045713us : 0: }D
syz-exec-14028 0...2 137045717us : 0: }D
syz-exec-14028 0...2 137045720us : 0: }D
syz-exec-14028 0...2 137045723us : 0: }D
syz-exec-14028 0...2 137045726us : 0: }D
syz-exec-14028 0...2 137045730us : 0: }D
syz-exec-14028 0...2 137045733us : 0: }D
syz-exec-14028 0...2 137045736us : 0: }D
syz-exec-14028 0...2 137045740us : 0: }D
syz-exec-14028 0...2 137045743us : 0: }D
syz-exec-14028 0...2 137045746us : 0: }D
syz-exec-14028 0...2 137045749us : 0: }D
syz-exec-14028 0...2 137045753us : 0: }D
syz-exec-14028 0...2 137045756us : 0: }D
syz-exec-14028 0...2 137045759us : 0: }D
syz-exec-14028 0...2 137045762us : 0: }D
syz-exec-14028 0...2 137045766us : 0: }D
syz-exec-14028 0...2 137045769us : 0: }D
syz-exec-14028 0...2 137045772us : 0: }D
syz-exec-14028 0...2 137045775us : 0: }D
syz-exec-14028 0...2 137045778us : 0: }D
syz-exec-14028 0...2 137045781us : 0: }D
syz-exec-14028 0...2 137045784us : 0: }D
syz-exec-14028 0...2 137045788us : 0: }D
syz-exec-14028 0...2 137045791us : 0: }D
syz-exec-14028 0...2 137045794us : 0: }D
syz-exec-14028 0...2 137045798us : 0: }D
syz-exec-14028 0...2 137045801us : 0: }D
syz-exec-14028 0...2 137045804us : 0: }D
syz-exec-14028 0...2 137045807us : 0: }D
syz-exec-14028 0...2 137045810us : 0: }D
syz-exec-14028 0...2 137045813us : 0: }D
syz-exec-14028 0...2 137045816us : 0: }D
syz-exec-14028 0...2 137045819us : 0: }D
syz-exec-14028 0...2 137045822us : 0: }D
syz-exec-14028 0...2 137045825us : 0: }D
syz-exec-14028 0...2 137045828us : 0: }D
syz-exec-14028 0...2 137045831us : 0: }D
syz-exec-14028 0...2 137045834us : 0: }D
syz-exec-14028 0...2 137045837us : 0: }D
syz-exec-14028 0...2 137045839us : 0: }D
syz-exec-14028 0...2 137045842us : 0: }D
syz-exec-14028 0...2 137045845us : 0: }D
syz-exec-14028 0...2 137045848us : 0: }D
syz-exec-14028 0...2 137045851us : 0: }D
syz-exec-14028 0...2 137045854us : 0: }D
syz-exec-14028 0...2 137045857us : 0: }D
syz-exec-14028 0...2 137045860us : 0: }D
syz-exec-14028 0...2 137045863us : 0: }D
syz-exec-14028 0...2 137045866us : 0: }D
syz-exec-14028 0...2 137045869us : 0: }D
syz-exec-14028 0...2 137045872us : 0: }D
syz-exec-14028 0...2 137045875us : 0: }D
syz-exec-14028 0...2 137045878us : 0: }D
syz-exec-14028 0...2 137045881us : 0: }D
syz-exec-14028 0...2 137045884us : 0: }D
syz-exec-14028 0...2 137045887us : 0: }D
syz-exec-14028 0...2 137045890us : 0: }D
syz-exec-14028 0...2 137045894us : 0: }D
syz-exec-14028 0...2 137045897us : 0: }D
syz-exec-14028 0...2 137045899us : 0: }D
syz-exec-14028 0...2 137045902us : 0: }D
syz-exec-14028 0...2 137045905us : 0: }D
syz-exec-14028 0...2 137045908us : 0: }D
syz-exec-14028 0...2 137045911us : 0: }D
syz-exec-14028 0...2 137045914us : 0: }D
syz-exec-14028 0...2 137045917us : 0: }D
syz-exec-14028 0...2 137045920us : 0: }D
syz-exec-14028 0...2 137045923us : 0: }D
syz-exec-14028 0...2 137045926us : 0: }D
syz-exec-14028 0...2 137045929us : 0: }D
syz-exec-14028 0...2 137045932us : 0: }D
syz-exec-14028 0...2 137045934us : 0: }D
syz-exec-14028 0...2 137045937us : 0: }D
syz-exec-14028 0...2 137045940us : 0: }D
syz-exec-14028 0...2 137045943us : 0: }D
syz-exec-14028 0...2 137045946us : 0: }D
syz-exec-14028 0...2 137045949us : 0: }D
syz-exec-14028 0...2 137045951us : 0: }D
syz-exec-14028 0...2 137045954us : 0: }D
syz-exec-14028 0...2 137045957us : 0: }D
syz-exec-14028 0...2 137045960us : 0: }D
syz-exec-14028 0...2 137045962us : 0: }D
syz-exec-14028 0...2 137045965us : 0: }D
syz-exec-14028 0...2 137045968us : 0: }D
syz-exec-14028 0...2 137045970us : 0: }D
syz-exec-14028 0...2 137045973us : 0: }D
syz-exec-14028 0...2 137045975us : 0: }D
syz-exec-14028 0...2 137045978us : 0: }D
syz-exec-14028 0...2 137045981us : 0: }D
syz-exec-14028 0...2 137045984us : 0: }D
syz-exec-14028 0...2 137045987us : 0: }D
syz-exec-14028 0...2 137045989us : 0: }D
syz-exec-14028 0...2 137045992us : 0: }D
syz-exec-14028 0...2 137045995us : 0: }D
syz-exec-14028 0...2 137045997us : 0: }D
syz-exec-14028 0...2 137046000us : 0: }D
syz-exec-14028 0...2 137046003us : 0: }D
syz-exec-14028 0...2 137046006us : 0: }D
syz-exec-14028 0...2 137046008us : 0: }D
syz-exec-14028 0...2 137046011us : 0: }D
syz-exec-14028 0...2 137046014us : 0: }D
syz-exec-14028 0...2 137046017us : 0: }D
syz-exec-14028 0...2 137046020us : 0: }D
syz-exec-14028 0...2 137046023us : 0: }D
syz-exec-14028 0...2 137046025us : 0: }D
syz-exec-14028 0...2 137046028us : 0: }D
syz-exec-14028 0...2 137046031us : 0: }D
syz-exec-14028 0...2 137046034us : 0: }D
syz-exec-14028 0...2 137046037us : 0: }D
syz-exec-14028 0...2 137046040us : 0: }D
syz-exec-14028 0...2 137046043us : 0: }D
syz-exec-14028 0...2 137046046us : 0: }D
syz-exec-14028 0...2 137046049us : 0: }D
syz-exec-14028 0...2 137046051us : 0: }D
syz-exec-14028 0...2 137046054us : 0: }D
syz-exec-14028 0...2 137046057us : 0: }D
syz-exec-14028 0...2 137046060us : 0: }D
syz-exec-14028 0...2 137046063us : 0: }D
syz-exec-14028 0...2 137046066us : 0: }D
syz-exec-14028 0...2 137046068us : 0: }D
syz-exec-14028 0...2 137046071us : 0: }D
syz-exec-14028 0...2 137046074us : 0: }D
syz-exec-14028 0...2 137046077us : 0: }D
syz-exec-14028 0...2 137046080us : 0: }D
syz-exec-14028 0...2 137046083us : 0: }D
syz-exec-14028 0...2 137046087us : 0: }D
syz-exec-14028 0...2 137046090us : 0: }D
syz-exec-14028 0...2 137046092us : 0: }D
syz-exec-14028 0...2 137046095us : 0: }D
syz-exec-14028 0...2 137046098us : 0: }D
syz-exec-14028 0...2 137046101us : 0: }D
syz-exec-14028 0...2 137046103us : 0: }D
syz-exec-14028 0...2 137046106us : 0: }D
syz-exec-14028 0...2 137046109us : 0: }D
syz-exec-14028 0...2 137046112us : 0: }D
syz-exec-14028 0...2 137046115us : 0: }D
syz-exec-14028 0...2 137046117us : 0: }D
syz-exec-14028 0...2 137046120us : 0: }D
syz-exec-14028 0...2 137046123us : 0: }D
syz-exec-14028 0...2 137046126us : 0: }D
syz-exec-14028 0...2 137046129us : 0: }D
syz-exec-14028 0...2 137046131us : 0: }D
syz-exec-14028 0...2 137046134us : 0: }D
syz-exec-14028 0...2 137046137us : 0: }D
syz-exec-14028 0...2 137046140us : 0: }D
syz-exec-14028 0...2 137046143us : 0: }D
syz-exec-14028 0...2 137046145us : 0: }D
syz-exec-14028 0...2 137046148us : 0: }D
syz-exec-14028 0...2 137046151us : 0: }D
syz-exec-14028 0...2 137046154us : 0: }D
syz-exec-14028 0...2 137046157us : 0: }D
syz-exec-14028 0...2 137046165us : 0: }D
syz-exec-14028 0...2 137046168us : 0: }D
syz-exec-14028 0...2 137046170us : 0: }D
syz-exec-14028 0...2 137046173us : 0: }D
syz-exec-14028 0...2 137046176us : 0: }D
syz-exec-14028 0...2 137046178us : 0: }D
syz-exec-14028 0...2 137046181us : 0: }D
syz-exec-14028 0...2 137046184us : 0: }D
syz-exec-14028 0...2 137046187us : 0: }D
syz-exec-14028 0...2 137046190us : 0: }D
syz-exec-14028 0...2 137046193us : 0: }D
syz-exec-14028 0...2 137046196us : 0: }D
syz-exec-14028 0...2 137046199us : 0: }D
syz-exec-14028 0...2 137046202us : 0: }D
syz-exec-14028 0...2 137046204us : 0: }D
syz-exec-14028 0...2 137046208us : 0: }D
syz-exec-14028 0...2 137046210us : 0: }D
syz-exec-14028 0...2 137046213us : 0: }D
syz-exec-14028 0...2 137046216us : 0: }D
syz-exec-14028 0...2 137046219us : 0: }D
syz-exec-14028 0...2 137046222us : 0: }D
syz-exec-14028 0...2 137046225us : 0: }D
syz-exec-14028 0...2 137046228us : 0: }D
syz-exec-14028 0...2 137046231us : 0: }D
syz-exec-14028 0...2 137046340us : 0: }D
syz-exec-14028 0...2 137046343us : 0: }D
syz-exec-14028 0...2 137046347us : 0: }D
syz-exec-14028 0...2 137046350us : 0: }D
syz-exec-14028 0...2 137046352us : 0: }D
syz-exec-14028 0...2 137046356us : 0: }D
syz-exec-14028 0...2 137046359us : 0: }D
syz-exec-14028 0...2 137046362us : 0: }D
syz-exec-14028 0...2 137046365us : 0: }D
syz-exec-14028 0...2 137046369us : 0: }D
syz-exec-14028 0...2 137046372us : 0: }D
syz-exec-14028 0...2 137046375us : 0: }D
syz-exec-14028 0...2 137046379us : 0: }D
syz-exec-14028 0...2 137046382us : 0: }D
syz-exec-14028 0...2 137046385us : 0: }D
syz-exec-14028 0...2 137046388us : 0: }D
syz-exec-14028 0...2 137046392us : 0: }D
syz-exec-14028 0...2 137046395us : 0: }D
syz-exec-14028 0...2 137046398us : 0: }D
syz-exec-14028 0...2 137046401us : 0: }D
syz-exec-14028 0...2 137046456us : 0: }D
syz-exec-14028 0...2 137046459us : 0: }D
syz-exec-14028 0...2 137046462us : 0: }D
syz-exec-14028 0...2 137046466us : 0: }D
syz-exec-14028 0...2 137046469us : 0: }D
syz-exec-14028 0...2 137046471us : 0: }D
syz-exec-14028 0...2 137046475us : 0: }D
syz-exec-14028 0...2 137046478us : 0: }D
syz-exec-14028 0...2 137046481us : 0: }D
syz-exec-14028 0...2 137046484us : 0: }D
syz-exec-14028 0...2 137046488us : 0: }D
syz-exec-14028 0...2 137046491us : 0: }D
syz-exec-14028 0...2 137046494us : 0: }D
syz-exec-14028 0...2 137046497us : 0: }D
syz-exec-14028 0...2 137046500us : 0: }D
syz-exec-14028 0...2 137046503us : 0: }D
syz-exec-14028 0...2 137046506us : 0: }D
syz-exec-14028 0...2 137046510us : 0: }D
syz-exec-14028 0...2 137046513us : 0: }D
syz-exec-14028 0...2 137046516us : 0: }D
syz-exec-14028 0...2 137046518us : 0: }D
syz-exec-14028 0...2 137046522us : 0: }D
syz-exec-14028 0...2 137046525us : 0: }D
syz-exec-14028 0...2 137046528us : 0: }D
syz-exec-14028 0...2 137046531us : 0: }D
syz-exec-14028 0...2 137046534us : 0: }D
syz-exec-14028 0...2 137046537us : 0: }D
syz-exec-14028 0...2 137046540us : 0: }D
syz-exec-14028 0...2 137046543us : 0: }D
syz-exec-14028 0...2 137046546us : 0: }D
syz-exec-14028 0...2 137046549us : 0: }D
syz-exec-14028 0...2 137046552us : 0: }D
syz-exec-14028 0...2 137046556us : 0: }D
syz-exec-14028 0...2 137046559us : 0: }D
syz-exec-14028 0...2 137046562us : 0: }D
syz-exec-14028 0...2 137046567us : 0: }D
syz-exec-14028 0...2 137046569us : 0: }D
syz-exec-14028 0...2 137046572us : 0: }D
syz-exec-14028 0...2 137046574us : 0: }D
syz-exec-14028 0...2 137046577us : 0: }D
syz-exec-14028 0...2 137046580us : 0: }D
syz-exec-14028 0...2 137046583us : 0: }D
syz-exec-14028 0...2 137046586us : 0: }D
syz-exec-14028 0...2 137046588us : 0: }D
syz-exec-14028 0...2 137046591us : 0: }D
syz-exec-14028 0...2 137046594us : 0: }D
syz-exec-14028 0...2 137046597us : 0: }D
syz-exec-14028 0...2 137046600us : 0: }D
syz-exec-14028 0...2 137046602us : 0: }D
syz-exec-14028 0...2 137046605us : 0: }D
syz-exec-14028 0...2 137046607us : 0: }D
syz-exec-14028 0...2 137046610us : 0: }D
syz-exec-14028 0...2 137046612us : 0: }D
syz-exec-14028 0...2 137046615us : 0: }D
syz-exec-14028 0...2 137046618us : 0: }D
syz-exec-14028 0...2 137046621us : 0: }D
syz-exec-14028 0...2 137046624us : 0: }D
syz-exec-14028 0...2 137046626us : 0: }D
syz-exec-14028 0...2 137046630us : 0: }D
syz-exec-14028 0...2 137046632us : 0: }D
syz-exec-14028 0...2 137046635us : 0: }D
syz-exec-14028 0...2 137046637us : 0: }D
syz-exec-14028 0...2 137046640us : 0: }D
syz-exec-14028 0...2 137046642us : 0: }D
syz-exec-14028 0...2 137046645us : 0: }D
syz-exec-14028 0...2 137046648us : 0: }D
syz-exec-14028 0...2 137046650us : 0: }D
syz-exec-14028 0...2 137046653us : 0: }D
syz-exec-14028 0...2 137046656us : 0: }D
syz-exec-14028 0...2 137046658us : 0: }D
syz-exec-14028 0...2 137046661us : 0: }D
syz-exec-14028 0...2 137046664us : 0: }D
syz-exec-14028 0...2 137046666us : 0: }D
syz-exec-14028 0...2 137046668us : 0: }D
syz-exec-14028 0...2 137046670us : 0: }D
syz-exec-14028 0...2 137046673us : 0: }D
syz-exec-14028 0...2 137046676us : 0: }D
syz-exec-14028 0...2 137046679us : 0: }D
syz-exec-14028 0...2 137046681us : 0: }D
syz-exec-14028 0...2 137046684us : 0: }D
syz-exec-14028 0...2 137046687us : 0: }D
syz-exec-14028 0...2 137046690us : 0: }D
syz-exec-14028 0...2 137046692us : 0: }D
syz-exec-14028 0...2 137046694us : 0: }D
syz-exec-14028 0...2 137046697us : 0: }D
syz-exec-14028 0.N.2 137046720us : 0: }D
syz-exec-14028 0...2 137051520us : 0: }D
syz-exec-14028 0...2 137051526us : 0: }D
syz-exec-14028 0...2 137051529us : 0: }D
syz-exec-14028 0...2 137051533us : 0: }D
syz-exec-14028 0...2 137051536us : 0: }D
syz-exec-14028 0...2 137051540us : 0: }D
syz-exec-14028 0...2 137051543us : 0: }D
syz-exec-14028 0...2 137051546us : 0: }D
syz-exec-14028 0...2 137051549us : 0: }D
syz-exec-14028 0...2 137051552us : 0: }D
syz-exec-14028 0...2 137051556us : 0: }D
syz-exec-14028 0...2 137051559us : 0: }D
syz-exec-14028 0...2 137051562us : 0: }D
syz-exec-14028 0...2 137051565us : 0: }D
syz-exec-14028 0...2 137051570us : 0: }D
syz-exec-14028 0...2 137051573us : 0: }D
syz-exec-14028 0...2 137051576us : 0: }D
syz-exec-14028 0...2 137051579us : 0: }D
syz-exec-14028 0...2 137051582us : 0: }D
syz-exec-14028 0...2 137051585us : 0: }D
syz-exec-14028 0...2 137051588us : 0: }D
syz-exec-14028 0...2 137051592us : 0: }D
syz-exec-14028 0...2 137051595us : 0: }D
syz-exec-14028 0...2 137051598us : 0: }D
syz-exec-14028 0...2 137051602us : 0: }D
syz-exec-14028 0...2 137051605us : 0: }D
syz-exec-14028 0...2 137051608us : 0: }D
syz-exec-14028 0...2 137051611us : 0: }D
syz-exec-14028 0...2 137051615us : 0: }D
syz-exec-14028 0...2 137051618us : 0: }D
syz-exec-14028 0...2 137051621us : 0: }D
syz-exec-14028 0...2 137051624us : 0: }D
syz-exec-14028 0...2 137051628us : 0: }D
syz-exec-14028 0...2 137051631us : 0: }D
syz-exec-14028 0...2 137051634us : 0: }D
syz-exec-14028 0...2 137051638us : 0: }D
syz-exec-14028 0...2 137051641us : 0: }D
syz-exec-14028 0...2 137051644us : 0: }D
syz-exec-14028 0...2 137051648us : 0: }D
syz-exec-14028 0...2 137051651us : 0: }D
syz-exec-14028 0...2 137051654us : 0: }D
syz-exec-14028 0...2 137051657us : 0: }D
syz-exec-14028 0...2 137051660us : 0: }D
syz-exec-14028 0...2 137051662us : 0: }D
syz-exec-14028 0...2 137051665us : 0: }D
syz-exec-14028 0...2 137051668us : 0: }D
syz-exec-14028 0...2 137051671us : 0: }D
syz-exec-14028 0...2 137051674us : 0: }D
syz-exec-14028 0...2 137051677us : 0: }D
syz-exec-14028 0...2 137051680us : 0: }D
syz-exec-14028 0...2 137051683us : 0: }D
syz-exec-14028 0...2 137051686us : 0: }D
syz-exec-14028 0...2 137051689us : 0: }D
syz-exec-14028 0...2 137051692us : 0: }D
syz-exec-14028 0...2 137051695us : 0: }D
syz-exec-14028 0...2 137051698us : 0: }D
syz-exec-14028 0...2 137051701us : 0: }D
syz-exec-14028 0...2 137051704us : 0: }D
syz-exec-14028 0...2 137051707us : 0: }D
syz-exec-14028 0...2 137051710us : 0: }D
syz-exec-14028 0...2 137051713us : 0: }D
syz-exec-14028 0...2 137051716us : 0: }D
syz-exec-14028 0...2 137051719us : 0: }D
syz-exec-14028 0...2 137051722us : 0: }D
syz-exec-14028 0...2 137051725us : 0: }D
syz-exec-14028 0...2 137051728us : 0: }D
syz-exec-14028 0...2 137051731us : 0: }D
syz-exec-14028 0...2 137051734us : 0: }D
syz-exec-14028 0...2 137051737us : 0: }D
syz-exec-14028 0...2 137051740us : 0: }D
syz-exec-14028 0...2 137051743us : 0: }D
syz-exec-14028 0...2 137051746us : 0: }D
syz-exec-14028 0...2 137051749us : 0: }D
syz-exec-14028 0...2 137051752us : 0: }D
syz-exec-14028 0...2 137051755us : 0: }D
syz-exec-14028 0...2 137051758us : 0: }D
syz-exec-14028 0...2 137051761us : 0: }D
syz-exec-14028 0...2 137051764us : 0: }D
syz-exec-14028 0...2 137051767us : 0: }D
syz-exec-14028 0...2 137051771us : 0: }D
syz-exec-14028 0...2 137051774us : 0: }D
syz-exec-14028 0...2 137051777us : 0: }D
syz-exec-14028 0...2 137051780us : 0: }D
syz-exec-14028 0...2 137051782us : 0: }D
syz-exec-14028 0...2 137051785us : 0: }D
syz-exec-14028 0...2 137051789us : 0: }D
syz-exec-14028 0...2 137051792us : 0: }D
syz-exec-14028 0...2 137051795us : 0: }D
syz-exec-14028 0...2 137051798us : 0: }D
syz-exec-14028 0...2 137051801us : 0: }D
syz-exec-14028 0...2 137051804us : 0: }D
syz-exec-14028 0...2 137051807us : 0: }D
syz-exec-14028 0...2 137051810us : 0: }D
syz-exec-14028 0...2 137051813us : 0: }D
syz-exec-14028 0...2 137051816us : 0: }D
syz-exec-14028 0...2 137051819us : 0: }D
syz-exec-14028 0...2 137051822us : 0: }D
syz-exec-14028 0...2 137051825us : 0: }D
syz-exec-14028 0...2 137051828us : 0: }D
syz-exec-14028 0...2 137051831us : 0: }D
syz-exec-14028 0...2 137051834us : 0: }D
syz-exec-14028 0...2 137051837us : 0: }D
syz-exec-14028 0...2 137051840us : 0: }D
syz-exec-14028 0...2 137051843us : 0: }D
syz-exec-14028 0...2 137051846us : 0: }D
syz-exec-14028 0...2 137051849us : 0: }D
syz-exec-14028 0...2 137051852us : 0: }D
syz-exec-14028 0...2 137051855us : 0: }D
syz-exec-14028 0...2 137051858us : 0: }D
syz-exec-14028 0...2 137051861us : 0: }D
syz-exec-14028 0...2 137051864us : 0: }D
syz-exec-14028 0...2 137051867us : 0: }D
syz-exec-14028 0...2 137051870us : 0: }D
syz-exec-14028 0...2 137051873us : 0: }D
syz-exec-14028 0...2 137051876us : 0: }D
syz-exec-14028 0...2 137051879us : 0: }D
syz-exec-14028 0...2 137051882us : 0: }D
syz-exec-14028 0...2 137051885us : 0: }D
syz-exec-14028 0...2 137051888us : 0: }D
syz-exec-14028 0...2 137051891us : 0: }D
syz-exec-14028 0...2 137051894us : 0: }D
syz-exec-14028 0...2 137051897us : 0: }D
syz-exec-14028 0...2 137051900us : 0: }D
syz-exec-14028 0...2 137051903us : 0: }D
syz-exec-14028 0...2 137051906us : 0: }D
syz-exec-14028 0...2 137051909us : 0: }D
syz-exec-14028 0...2 137051912us : 0: }D
syz-exec-14028 0...2 137051915us : 0: }D
syz-exec-14028 0...2 137051918us : 0: }D
syz-exec-14028 0...2 137051921us : 0: }D
syz-exec-14028 0...2 137051924us : 0: }D
syz-exec-14028 0...2 137051927us : 0: }D
syz-exec-14028 0...2 137051930us : 0: }D
syz-exec-14028 0...2 137051933us : 0: }D
syz-exec-14028 0...2 137051935us : 0: }D
syz-exec-14028 0...2 137051938us : 0: }D
syz-exec-14028 0...2 137051940us : 0: }D
syz-exec-14028 0...2 137051943us : 0: }D
syz-exec-14028 0...2 137051945us : 0: }D
syz-exec-14028 0...2 137051948us : 0: }D
syz-exec-14028 0...2 137051951us : 0: }D
syz-exec-14028 0...2 137051953us : 0: }D
syz-exec-14028 0...2 137051955us : 0: }D
syz-exec-14028 0...2 137051958us : 0: }D
syz-exec-14028 0...2 137051961us : 0: }D
syz-exec-14028 0...2 137051964us : 0: }D
syz-exec-14028 0...2 137051966us : 0: }D
syz-exec-14028 0...2 137051969us : 0: }D
syz-exec-14028 0...2 137051971us : 0: }D
syz-exec-14028 0...2 137051974us : 0: }D
syz-exec-14028 0...2 137051976us : 0: }D
syz-exec-14028 0...2 137051979us : 0: }D
syz-exec-14028 0...2 137051982us : 0: }D
syz-exec-14028 0...2 137051984us : 0: }D
syz-exec-14028 0...2 137051987us : 0: }D
syz-exec-14028 0...2 137051990us : 0: }D
syz-exec-14028 0...2 137051992us : 0: }D
syz-exec-14028 0...2 137051995us : 0: }D
syz-exec-14028 0...2 137051998us : 0: }D
syz-exec-14028 0...2 137052000us : 0: }D
syz-exec-14028 0...2 137052003us : 0: }D
syz-exec-14028 0...2 137052006us : 0: }D
syz-exec-14028 0...2 137052008us : 0: }D
syz-exec-14028 0...2 137052011us : 0: }D
syz-exec-14028 0...2 137052013us : 0: }D
syz-exec-14028 0...2 137052016us : 0: }D
syz-exec-14028 0...2 137052018us : 0: }D
syz-exec-14028 0...2 137052021us : 0: }D
syz-exec-14028 0...2 137052024us : 0: }D
syz-exec-14028 0...2 137052026us : 0: }D
syz-exec-14028 0...2 137052029us : 0: }D
syz-exec-14028 0...2 137052031us : 0: }D
syz-exec-14028 0...2 137052034us : 0: }D
syz-exec-14028 0...2 137052036us : 0: }D
syz-exec-14028 0...2 137052039us : 0: }D
syz-exec-14028 0...2 137052041us : 0: }D
syz-exec-14028 0...2 137052043us : 0: }D
syz-exec-14028 0...2 137052046us : 0: }D
syz-exec-14028 0...2 137052048us : 0: }D
syz-exec-14028 0...2 137052051us : 0: }D
syz-exec-14028 0...2 137052053us : 0: }D
syz-exec-14028 0...2 137052056us : 0: }D
syz-exec-14028 0...2 137052058us : 0: }D
syz-exec-14028 0...2 137052061us : 0: }D
syz-exec-14028 0...2 137052065us : 0: }D
syz-exec-14028 0...2 137052068us : 0: }D
syz-exec-14028 0...2 137052070us : 0: }D
syz-exec-14028 0...2 137052073us : 0: }D
syz-exec-14028 0...2 137052075us : 0: }D
syz-exec-14028 0...2 137052078us : 0: }D
syz-exec-14028 0...2 137052081us : 0: }D
syz-exec-14028 0...2 137052083us : 0: }D
syz-exec-14028 0...2 137052086us : 0: }D
syz-exec-14028 0...2 137052088us : 0: }D
syz-exec-14028 0...2 137052090us : 0: }D
syz-exec-14028 0...2 137052092us : 0: }D
syz-exec-14028 0...2 137052095us : 0: }D
syz-exec-14028 0...2 137052097us : 0: }D
syz-exec-14028 0...2 137052099us : 0: }D
syz-exec-14028 0...2 137052102us : 0: }D
syz-exec-14028 0...2 137052104us : 0: }D
syz-exec-14028 0...2 137052106us : 0: }D
syz-exec-14028 0...2 137052109us : 0: }D
syz-exec-14028 0...2 137052111us : 0: }D
syz-exec-14028 0...2 137052114us : 0: }D
syz-exec-14028 0...2 137052116us : 0: }D
syz-exec-14028 0...2 137052119us : 0: }D
syz-exec-14028 0...2 137052121us : 0: }D
syz-exec-14028 0...2 137052124us : 0: }D
syz-exec-14028 0...2 137052126us : 0: }D
syz-exec-14028 0...2 137052129us : 0: }D
syz-exec-14028 0...2 137052132us : 0: }D
syz-exec-14028 0...2 137052135us : 0: }D
syz-exec-14028 0...2 137052138us : 0: }D
syz-exec-14028 0...2 137052141us : 0: }D
syz-exec-14028 0...2 137052144us : 0: }D
syz-exec-14028 0...2 137052147us : 0: }D
syz-exec-14028 0...2 137052150us : 0: }D
syz-exec-14028 0...2 137052153us : 0: }D
syz-exec-14028 0...2 137052156us : 0: }D
syz-exec-14028 0...2 137052164us : 0: }D
syz-exec-14028 0...2 137052167us : 0: }D
syz-exec-14028 0...2 137052170us : 0: }D
syz-exec-14028 0...2 137052173us : 0: }D
syz-exec-14028 0...2 137052175us : 0: }D
syz-exec-14028 0...2 137052178us : 0: }D
syz-exec-14028 0...2 137052181us : 0: }D
syz-exec-14028 0...2 137052184us : 0: }D
syz-exec-14028 0...2 137052187us : 0: }D
syz-exec-14028 0...2 137052190us : 0: }D
syz-exec-14028 0...2 137052193us : 0: }D
syz-exec-14028 0...2 137052196us : 0: }D
syz-exec-14028 0...2 137052198us : 0: }D
syz-exec-14028 0...2 137052201us : 0: }D
syz-exec-14028 0...2 137052204us : 0: }D
syz-exec-14028 0...2 137052206us : 0: }D
syz-exec-14028 0...2 137052208us : 0: }D
syz-exec-14028 0...2 137052212us : 0: }D
syz-exec-14028 0...2 137052214us : 0: }D
syz-exec-14028 0...2 137052217us : 0: }D
syz-exec-14028 0...2 137052220us : 0: }D
syz-exec-14028 0...2 137052223us : 0: }D
syz-exec-14028 0...2 137052226us : 0: }D
syz-exec-14028 0...2 137052228us : 0: }D
syz-exec-14028 0...2 137052231us : 0: }D
syz-exec-14028 0...2 137052267us : 0: }D
syz-exec-14028 0...2 137052271us : 0: }D
syz-exec-14028 0...2 137052273us : 0: }D
syz-exec-14028 0...2 137052277us : 0: }D
syz-exec-14028 0...2 137052280us : 0: }D
syz-exec-14028 0...2 137052283us : 0: }D
syz-exec-14028 0...2 137052286us : 0: }D
syz-exec-14028 0...2 137052289us : 0: }D
syz-exec-14028 0...2 137052292us : 0: }D
syz-exec-14028 0...2 137052295us : 0: }D
syz-exec-14028 0...2 137052298us : 0: }D
syz-exec-14028 0...2 137052301us : 0: }D
syz-exec-14028 0...2 137052304us : 0: }D
syz-exec-14028 0...2 137052307us : 0: }D
syz-exec-14028 0...2 137052311us : 0: }D
syz-exec-14028 0...2 137052314us : 0: }D
syz-exec-14028 0...2 137052317us : 0: }D
syz-exec-14028 0...2 137052320us : 0: }D
syz-exec-14028 0...2 137052323us : 0: }D
syz-exec-14028 0...2 137052326us : 0: }D
syz-exec-14028 0...2 137052329us : 0: }D
syz-exec-14028 0...2 137052332us : 0: }D
syz-exec-14028 0...2 137052334us : 0: }D
syz-exec-14028 0...2 137052337us : 0: }D
syz-exec-14028 0...2 137052341us : 0: }D
syz-exec-14028 0...2 137052344us : 0: }D
syz-exec-14028 0...2 137052347us : 0: }D
syz-exec-14028 0...2 137052349us : 0: }D
syz-exec-14028 0...2 137052353us : 0: }D
syz-exec-14028 0...2 137052355us : 0: }D
syz-exec-14028 0...2 137052358us : 0: }D
syz-exec-14028 0...2 137052361us : 0: }D
syz-exec-14028 0...2 137052364us : 0: }D
syz-exec-14028 0...2 137052367us : 0: }D
syz-exec-14028 0...2 137052370us : 0: }D
syz-exec-14028 0...2 137052373us : 0: }D
syz-exec-14028 0...2 137052376us : 0: }D
syz-exec-14028 0...2 137052379us : 0: }D
syz-exec-14028 0...2 137052382us : 0: }D
syz-exec-14028 0...2 137052385us : 0: }D
syz-exec-14028 0...2 137052388us : 0: }D
syz-exec-14028 0...2 137052391us : 0: }D
syz-exec-14028 0...2 137052393us : 0: }D
syz-exec-14028 0...2 137052396us : 0: }D
syz-exec-14028 0...2 137052398us : 0: }D
syz-exec-14028 0...2 137052401us : 0: }D
syz-exec-14028 0...2 137052403us : 0: }D
syz-exec-14028 0...2 137052405us : 0: }D
syz-exec-14028 0...2 137052408us : 0: }D
syz-exec-14028 0...2 137052410us : 0: }D
syz-exec-14028 0...2 137052412us : 0: }D
syz-exec-14028 0...2 137052415us : 0: }D
syz-exec-14028 0...2 137052418us : 0: }D
syz-exec-14028 0...2 137052420us : 0: }D
syz-exec-14028 0...2 137052423us : 0: }D
syz-exec-14028 0...2 137052425us : 0: }D
syz-exec-14028 0...2 137052428us : 0: }D
syz-exec-14028 0...2 137052431us : 0: }D
syz-exec-14028 0...2 137052434us : 0: }D
syz-exec-14028 0...2 137052437us : 0: }D
syz-exec-14028 0...2 137052439us : 0: }D
syz-exec-14028 0...2 137052442us : 0: }D
syz-exec-14028 0...2 137052445us : 0: }D
syz-exec-14028 0...2 137052448us : 0: }D
syz-exec-14028 0...2 137052451us : 0: }D
syz-exec-14028 0...2 137052453us : 0: }D
syz-exec-14028 0...2 137052456us : 0: }D
syz-exec-14028 0...2 137052459us : 0: }D
syz-exec-14028 0...2 137052461us : 0: }D
syz-exec-14028 0...2 137052464us : 0: }D
syz-exec-14028 0...2 137052467us : 0: }D
syz-exec-14028 0...2 137052470us : 0: }D
syz-exec-14028 0...2 137052472us : 0: }D
syz-exec-14028 0...2 137052475us : 0: }D
syz-exec-14028 0...2 137052478us : 0: }D
syz-exec-14028 0...2 137052481us : 0: }D
syz-exec-14028 0...2 137052483us : 0: }D
syz-exec-14028 0...2 137052486us : 0: }D
syz-exec-14028 0...2 137052489us : 0: }D
syz-exec-14028 0...2 137052491us : 0: }D
syz-exec-14028 0...2 137052494us : 0: }D
syz-exec-14028 0...2 137052497us : 0: }D
syz-exec-14028 0...2 137052500us : 0: }D
syz-exec-14028 0...2 137052503us : 0: }D
syz-exec-14028 0...2 137052506us : 0: }D
syz-exec-14028 0...2 137052509us : 0: }D
syz-exec-14028 0...2 137052511us : 0: }D
syz-exec-14028 0...2 137052514us : 0: }D
syz-exec-14028 0...2 137052517us : 0: }D
syz-exec-14028 0...2 137052520us : 0: }D
syz-exec-14028 0...2 137052523us : 0: }D
syz-exec-14028 0...2 137052525us : 0: }D
syz-exec-14028 0...2 137052529us : 0: }D
syz-exec-14028 0.N.2 137052571us : 0: }D
syz-exec-14028 0...2 137059783us : 0: }D
syz-exec-14028 0...2 137059790us : 0: }D
syz-exec-14028 0...2 137059793us : 0: }D
syz-exec-14028 0...2 137059796us : 0: }D
syz-exec-14028 0...2 137059799us : 0: }D
syz-exec-14028 0...2 137059803us : 0: }D
syz-exec-14028 0...2 137059806us : 0: }D
syz-exec-14028 0...2 137059809us : 0: }D
syz-exec-14028 0...2 137059812us : 0: }D
syz-exec-14028 0...2 137059816us : 0: }D
syz-exec-14028 0...2 137059819us : 0: }D
syz-exec-14028 0...2 137059823us : 0: }D
syz-exec-14028 0...2 137059826us : 0: }D
syz-exec-14028 0...2 137059829us : 0: }D
syz-exec-14028 0...2 137059832us : 0: }D
syz-exec-14028 0...2 137059837us : 0: }D
syz-exec-14028 0...2 137059840us : 0: }D
syz-exec-14028 0...2 137059843us : 0: }D
syz-exec-14028 0...2 137059846us : 0: }D
syz-exec-14028 0...2 137059849us : 0: }D
syz-exec-14028 0...2 137059852us : 0: }D
syz-exec-14028 0...2 137059855us : 0: }D
syz-exec-14028 0...2 137059858us : 0: }D
syz-exec-14028 0...2 137059861us : 0: }D
syz-exec-14028 0...2 137059864us : 0: }D
syz-exec-14028 0...2 137059867us : 0: }D
syz-exec-14028 0...2 137059870us : 0: }D
syz-exec-14028 0...2 137059873us : 0: }D
syz-exec-14028 0...2 137059876us : 0: }D
syz-exec-14028 0...2 137059878us : 0: }D
syz-exec-14028 0...2 137059881us : 0: }D
syz-exec-14028 0...2 137059884us : 0: }D
syz-exec-14028 0...2 137059887us : 0: }D
syz-exec-14028 0...2 137059890us : 0: }D
syz-exec-14028 0...2 137059893us : 0: }D
syz-exec-14028 0...2 137059895us : 0: }D
syz-exec-14028 0...2 137059898us : 0: }D
syz-exec-14028 0...2 137059900us : 0: }D
syz-exec-14028 0...2 137059902us : 0: }D
syz-exec-14028 0...2 137059905us : 0: }D
syz-exec-14028 0...2 137059908us : 0: }D
syz-exec-14028 0...2 137059911us : 0: }D
syz-exec-14028 0...2 137059914us : 0: }D
syz-exec-14028 0...2 137059917us : 0: }D
syz-exec-14028 0...2 137059919us : 0: }D
syz-exec-14028 0...2 137059922us : 0: }D
syz-exec-14028 0...2 137059924us : 0: }D
syz-exec-14028 0...2 137059926us : 0: }D
syz-exec-14028 0...2 137059929us : 0: }D
syz-exec-14028 0...2 137059931us : 0: }D
syz-exec-14028 0...2 137059934us : 0: }D
syz-exec-14028 0...2 137059937us : 0: }D
syz-exec-14028 0...2 137059940us : 0: }D
syz-exec-14028 0...2 137059943us : 0: }D
syz-exec-14028 0...2 137059945us : 0: }D
syz-exec-14028 0...2 137059948us : 0: }D
syz-exec-14028 0...2 137059951us : 0: }D
syz-exec-14028 0...2 137059954us : 0: }D
syz-exec-14028 0...2 137059957us : 0: }D
syz-exec-14028 0...2 137059960us : 0: }D
syz-exec-14028 0...2 137059963us : 0: }D
syz-exec-14028 0...2 137059966us : 0: }D
syz-exec-14028 0...2 137059969us : 0: }D
syz-exec-14028 0...2 137059972us : 0: }D
syz-exec-14028 0...2 137059975us : 0: }D
syz-exec-14028 0...2 137059978us : 0: }D
syz-exec-14028 0...2 137059980us : 0: }D
syz-exec-14028 0...2 137059983us : 0: }D
syz-exec-14028 0...2 137059986us : 0: }D
syz-exec-14028 0...2 137059989us : 0: }D
syz-exec-14028 0...2 137059992us : 0: }D
syz-exec-14028 0...2 137059995us : 0: }D
syz-exec-14028 0...2 137059998us : 0: }D
syz-exec-14028 0...2 137060001us : 0: }D
syz-exec-14028 0...2 137060004us : 0: }D
syz-exec-14028 0...2 137060006us : 0: }D
syz-exec-14028 0...2 137060009us : 0: }D
syz-exec-14028 0...2 137060012us : 0: }D
syz-exec-14028 0...2 137060015us : 0: }D
syz-exec-14028 0...2 137060018us : 0: }D
syz-exec-14028 0...2 137060021us : 0: }D
syz-exec-14028 0...2 137060023us : 0: }D
syz-exec-14028 0...2 137060026us : 0: }D
syz-exec-14028 0...2 137060029us : 0: }D
syz-exec-14028 0...2 137060032us : 0: }D
syz-exec-14028 0...2 137060035us : 0: }D
syz-exec-14028 0...2 137060037us : 0: }D
syz-exec-14028 0...2 137060040us : 0: }D
syz-exec-14028 0...2 137060043us : 0: }D
syz-exec-14028 0...2 137060046us : 0: }D
syz-exec-14028 0...2 137060049us : 0: }D
syz-exec-14028 0...2 137060052us : 0: }D
syz-exec-14028 0...2 137060055us : 0: }D
syz-exec-14028 0...2 137060058us : 0: }D
syz-exec-14028 0...2 137060060us : 0: }D
syz-exec-14028 0...2 137060063us : 0: }D
syz-exec-14028 0...2 137060066us : 0: }D
syz-exec-14028 0...2 137060069us : 0: }D
syz-exec-14028 0...2 137060072us : 0: }D
syz-exec-14028 0...2 137060075us : 0: }D
syz-exec-14028 0...2 137060078us : 0: }D
syz-exec-14028 0...2 137060081us : 0: }D
syz-exec-14028 0...2 137060084us : 0: }D
syz-exec-14028 0...2 137060087us : 0: }D
syz-exec-14028 0...2 137060089us : 0: }D
syz-exec-14028 0...2 137060092us : 0: }D
syz-exec-14049 0...2 137068365us : 0: }D
syz-exec-14049 0...2 137068371us : 0: }D
syz-exec-14049 0...2 137068375us : 0: }D
syz-exec-14049 0...2 137068378us : 0: }D
syz-exec-14049 0...2 137068381us : 0: }D
syz-exec-14049 0...2 137068384us : 0: }D
syz-exec-14049 0...2 137068388us : 0: }D
syz-exec-14049 0...2 137068390us : 0: }D
syz-exec-14049 0...2 137068393us : 0: }D
syz-exec-14049 0...2 137068397us : 0: }D
syz-exec-14049 0...2 137068399us : 0: }D
syz-exec-14049 0...2 137068402us : 0: }D
syz-exec-14049 0...2 137068405us : 0: }D
syz-exec-14049 0.N.2 137068434us : 0: }D
syz-exec-14049 0...2 137068468us : 0: }D
syz-exec-14049 0...2 137068471us : 0: }D
syz-exec-14049 0...2 137068475us : 0: }D
syz-exec-14049 0...2 137068478us : 0: }D
syz-exec-14049 0...2 137068481us : 0: }D
syz-exec-14049 0...2 137068484us : 0: }D
syz-exec-14049 0...2 137068487us : 0: }D
syz-exec-14049 0...2 137068490us : 0: }D
syz-exec-14049 0...2 137068493us : 0: }D
syz-exec-14049 0...2 137068497us : 0: }D
syz-exec-14049 0...2 137068500us : 0: }D
syz-exec-14049 0...2 137068502us : 0: }D
syz-exec-14049 0...2 137068506us : 0: }D
syz-exec-14049 0...2 137068509us : 0: }D
syz-exec-14049 0...2 137068512us : 0: }D
syz-exec-14049 0...2 137068515us : 0: }D
syz-exec-14049 0...2 137068518us : 0: }D
syz-exec-14049 0...2 137068521us : 0: }D
syz-exec-14049 0...2 137068524us : 0: }D
syz-exec-14049 0...2 137068527us : 0: }D
syz-exec-14049 0...2 137068531us : 0: }D
syz-exec-14049 0...2 137068533us : 0: }D
syz-exec-14049 0...2 137068536us : 0: }D
syz-exec-14049 0...2 137068540us : 0: }D
syz-exec-14049 0...2 137068543us : 0: }D
syz-exec-14049 0...2 137068546us : 0: }D
syz-exec-14049 0...2 137068549us : 0: }D
syz-exec-14049 0...2 137068552us : 0: }D
syz-exec-14049 0...2 137068555us : 0: }D
syz-exec-14049 0...2 137068558us : 0: }D
syz-exec-14049 0...2 137068561us : 0: }D
syz-exec-14049 0...2 137068565us : 0: }D
syz-exec-14049 0...2 137068568us : 0: }D
syz-exec-14049 0...2 137068570us : 0: }D
syz-exec-14049 0...2 137068574us : 0: }D
syz-exec-14049 0...2 137068577us : 0: }D
syz-exec-14049 0...2 137068580us : 0: }D
syz-exec-14049 0...2 137068583us : 0: }D
syz-exec-14049 0...2 137068587us : 0: }D
syz-exec-14049 0...2 137068590us : 0: }D
syz-exec-14049 0...2 137068592us : 0: }D
syz-exec-14049 0...2 137068596us : 0: }D
syz-exec-14049 0...2 137068599us : 0: }D
syz-exec-14049 0...2 137068602us : 0: }D
syz-exec-14049 0...2 137068605us : 0: }D
syz-exec-14049 0...2 137068609us : 0: }D
syz-exec-14049 0...2 137068612us : 0: }D
syz-exec-14049 0...2 137068614us : 0: }D
syz-exec-14049 0...2 137068617us : 0: }D
syz-exec-14049 0...2 137068621us : 0: }D
syz-exec-14049 0...2 137068624us : 0: }D
syz-exec-14049 0...2 137068627us : 0: }D
syz-exec-14049 0...2 137068630us : 0: }D
syz-exec-14049 0...2 137068632us : 0: }D
syz-exec-14049 0...2 137068635us : 0: }D
syz-exec-14049 0...2 137068638us : 0: }D
syz-exec-14049 0...2 137068641us : 0: }D
syz-exec-14049 0...2 137068644us : 0: }D
syz-exec-14049 0...2 137068647us : 0: }D
syz-exec-14049 0...2 137068650us : 0: }D
syz-exec-14049 0...2 137068653us : 0: }D
syz-exec-14049 0...2 137068656us : 0: }D
syz-exec-14049 0...2 137068658us : 0: }D
syz-exec-14049 0...2 137068661us : 0: }D
syz-exec-14049 0...2 137068664us : 0: }D
syz-exec-14049 0...2 137068669us : 0: }D
syz-exec-14049 0...2 137068672us : 0: }D
syz-exec-14049 0...2 137068675us : 0: }D
syz-exec-14049 0...2 137068678us : 0: }D
syz-exec-14049 0...2 137068681us : 0: }D
syz-exec-14049 0...2 137068684us : 0: }D
syz-exec-14049 0...2 137068686us : 0: }D
syz-exec-14049 0...2 137068689us : 0: }D
syz-exec-14049 0...2 137068692us : 0: }D
syz-exec-14049 0...2 137068695us : 0: }D
syz-exec-14049 0...2 137068698us : 0: }D
syz-exec-14049 0...2 137068701us : 0: }D
syz-exec-14049 0...2 137068704us : 0: }D
syz-exec-14049 0...2 137068707us : 0: }D
syz-exec-14049 0...2 137068710us : 0: }D
syz-exec-14049 0...2 137068713us : 0: }D
syz-exec-14049 0...2 137068716us : 0: }D
syz-exec-14049 0...2 137068719us : 0: }D
syz-exec-14049 0...2 137068721us : 0: }D
syz-exec-14049 0...2 137068724us : 0: }D
syz-exec-14049 0...2 137068727us : 0: }D
syz-exec-14049 0...2 137068730us : 0: }D
syz-exec-14049 0...2 137068733us : 0: }D
syz-exec-14049 0...2 137068736us : 0: }D
syz-exec-14049 0...2 137068739us : 0: }D
syz-exec-14049 0...2 137068742us : 0: }D
syz-exec-14049 0...2 137068744us : 0: }D
syz-exec-14049 0...2 137068747us : 0: }D
syz-exec-14049 0...2 137068750us : 0: }D
syz-exec-14049 0...2 137068753us : 0: }D
syz-exec-14049 0...2 137068756us : 0: }D
syz-exec-14049 0...2 137068759us : 0: }D
syz-exec-14049 0...2 137068762us : 0: }D
syz-exec-14049 0...2 137068765us : 0: }D
syz-exec-14049 0...2 137068768us : 0: }D
syz-exec-14049 0...2 137068770us : 0: }D
syz-exec-14049 0...2 137068773us : 0: }D
syz-exec-14049 0...2 137068776us : 0: }D
syz-exec-14049 0...2 137068779us : 0: }D
syz-exec-14049 0...2 137068782us : 0: }D
syz-exec-14049 0...2 137068785us : 0: }D
syz-exec-14049 0...2 137068788us : 0: }D
syz-exec-14049 0...2 137068791us : 0: }D
syz-exec-14049 0...2 137068794us : 0: }D
syz-exec-14049 0...2 137068797us : 0: }D
syz-exec-14049 0...2 137068800us : 0: }D
syz-exec-14049 0...2 137068803us : 0: }D
syz-exec-14049 0...2 137068806us : 0: }D
syz-exec-14049 0...2 137068809us : 0: }D
syz-exec-14049 0...2 137068811us : 0: }D
syz-exec-14049 0...2 137068814us : 0: }D
syz-exec-14049 0...2 137068817us : 0: }D
syz-exec-14049 0...2 137068820us : 0: }D
syz-exec-14049 0...2 137068823us : 0: }D
syz-exec-14049 0...2 137068826us : 0: }D
syz-exec-14049 0...2 137068829us : 0: }D
syz-exec-14049 0...2 137068831us : 0: }D
syz-exec-14049 0...2 137068834us : 0: }D
syz-exec-14049 0...2 137068837us : 0: }D
syz-exec-14049 0...2 137068840us : 0: }D
syz-exec-14049 0...2 137068843us : 0: }D
syz-exec-14049 0...2 137068846us : 0: }D
syz-exec-14049 0...2 137068849us : 0: }D
syz-exec-14049 0...2 137068852us : 0: }D
syz-exec-14049 0...2 137068855us : 0: }D
syz-exec-14049 0...2 137068857us : 0: }D
syz-exec-14049 0...2 137068861us : 0: }D
syz-exec-14049 0...2 137068863us : 0: }D
syz-exec-14049 0...2 137068866us : 0: }D
syz-exec-14049 0...2 137068869us : 0: }D
syz-exec-14049 0...2 137068872us : 0: }D
syz-exec-14049 0...2 137068875us : 0: }D
syz-exec-14049 0...2 137068878us : 0: }D
syz-exec-14049 0...2 137068881us : 0: }D
syz-exec-14049 0...2 137068884us : 0: }D
syz-exec-14049 0...2 137068887us : 0: }D
syz-exec-14049 0...2 137068890us : 0: }D
syz-exec-14049 0...2 137068893us : 0: }D
syz-exec-14049 0...2 137068896us : 0: }D
syz-exec-14049 0...2 137068899us : 0: }D
syz-exec-14049 0...2 137068902us : 0: }D
syz-exec-14049 0...2 137068905us : 0: }D
syz-exec-14049 0...2 137068908us : 0: }D
syz-exec-14049 0...2 137068911us : 0: }D
syz-exec-14049 0...2 137068914us : 0: }D
syz-exec-14049 0...2 137068917us : 0: }D
syz-exec-14049 0...2 137068920us : 0: }D
syz-exec-14049 0...2 137068922us : 0: }D
syz-exec-14049 0...2 137068925us : 0: }D
syz-exec-14049 0...2 137068928us : 0: }D
syz-exec-14049 0...2 137068931us : 0: }D
syz-exec-14049 0...2 137068934us : 0: }D
syz-exec-14049 0...2 137068937us : 0: }D
syz-exec-14049 0...2 137068940us : 0: }D
syz-exec-14049 0...2 137068943us : 0: }D
syz-exec-14049 0...2 137068946us : 0: }D
syz-exec-14049 0...2 137068949us : 0: }D
syz-exec-14049 0...2 137068952us : 0: }D
syz-exec-14049 0...2 137068955us : 0: }D
syz-exec-14049 0...2 137068958us : 0: }D
syz-exec-14049 0...2 137068961us : 0: }D
syz-exec-14049 0...2 137068963us : 0: }D
syz-exec-14049 0...2 137068966us : 0: }D
syz-exec-14049 0...2 137068969us : 0: }D
syz-exec-14049 0...2 137068972us : 0: }D
syz-exec-14049 0...2 137068975us : 0: }D
syz-exec-14049 0...2 137068978us : 0: }D
syz-exec-14049 0...2 137068981us : 0: }D
syz-exec-14049 0...2 137068984us : 0: }D
syz-exec-14049 0...2 137068987us : 0: }D
syz-exec-14049 0...2 137068990us : 0: }D
syz-exec-14049 0...2 137068993us : 0: }D
syz-exec-
---
This bug is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.
syzbot will keep track of this bug report. See:
https://goo.gl/tpsmEJ#bug-status-tracking for how to communicate with
syzbot.
^ permalink raw reply
* [PATCH net] netfilter: ipv6: nf_defrag: reduce struct net memory waste
From: Eric Dumazet @ 2018-06-13 17:11 UTC (permalink / raw)
To: Pablo Neira Ayuso, Jozsef Kadlecsik, Florian Westphal
Cc: netfilter-devel, netdev, Eric Dumazet, Eric Dumazet
It is a waste of memory to use a full "struct netns_sysctl_ipv6"
while only one pointer is really used, considering netns_sysctl_ipv6
keeps growing.
Also, since "struct netns_frags" has cache line alignment,
it is better to move the frags_hdr pointer outside, otherwise
we spend a full cache line for this pointer.
This saves 192 bytes of memory per netns.
Fixes: c038a767cd69 ("ipv6: add a new namespace for nf_conntrack_reasm")
Signed-off-by: Eric Dumazet <edumazet@google.com>
---
include/net/net_namespace.h | 1 +
include/net/netns/ipv6.h | 1 -
net/ipv6/netfilter/nf_conntrack_reasm.c | 6 +++---
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h
index 47e35cce3b648d696b127ed7bd643036128795f6..a71264d75d7f98d28f92dfd861ffe6e0d39c0198 100644
--- a/include/net/net_namespace.h
+++ b/include/net/net_namespace.h
@@ -128,6 +128,7 @@ struct net {
#endif
#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
struct netns_nf_frag nf_frag;
+ struct ctl_table_header *nf_frag_frags_hdr;
#endif
struct sock *nfnl;
struct sock *nfnl_stash;
diff --git a/include/net/netns/ipv6.h b/include/net/netns/ipv6.h
index c978a31b0f846210b4c2a369af960d5349b5395a..762ac9931b6251152b6ee0e5780df0f7b073f3e6 100644
--- a/include/net/netns/ipv6.h
+++ b/include/net/netns/ipv6.h
@@ -109,7 +109,6 @@ struct netns_ipv6 {
#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)
struct netns_nf_frag {
- struct netns_sysctl_ipv6 sysctl;
struct netns_frags frags;
};
#endif
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c
index 5e0332014c1738999e680c1853829f384e880284..a452d99c9f5281b5e5d7e6f0162611deeb82212d 100644
--- a/net/ipv6/netfilter/nf_conntrack_reasm.c
+++ b/net/ipv6/netfilter/nf_conntrack_reasm.c
@@ -107,7 +107,7 @@ static int nf_ct_frag6_sysctl_register(struct net *net)
if (hdr == NULL)
goto err_reg;
- net->nf_frag.sysctl.frags_hdr = hdr;
+ net->nf_frag_frags_hdr = hdr;
return 0;
err_reg:
@@ -121,8 +121,8 @@ static void __net_exit nf_ct_frags6_sysctl_unregister(struct net *net)
{
struct ctl_table *table;
- table = net->nf_frag.sysctl.frags_hdr->ctl_table_arg;
- unregister_net_sysctl_table(net->nf_frag.sysctl.frags_hdr);
+ table = net->nf_frag_frags_hdr->ctl_table_arg;
+ unregister_net_sysctl_table(net->nf_frag_frags_hdr);
if (!net_eq(net, &init_net))
kfree(table);
}
--
2.18.0.rc1.242.g61856ae69a-goog
^ permalink raw reply related
* Re: [Intel-wired-lan] [PATCH net/jkirsher] bpf, xdp, i40e: fix i40e_build_skb skb reserve and truesize
From: Alexander Duyck @ 2018-06-13 17:10 UTC (permalink / raw)
To: John Fastabend
Cc: Daniel Borkmann, Jeff Kirsher, Netdev, Björn Töpel,
intel-wired-lan, keith.busch, makita.toshiaki
In-Reply-To: <d56adbb7-12df-c197-1976-3eb161af8484@gmail.com>
On Wed, Jun 13, 2018 at 9:26 AM, John Fastabend
<john.fastabend@gmail.com> wrote:
> On 06/13/2018 02:04 AM, Daniel Borkmann wrote:
>> Using skb_reserve(skb, I40E_SKB_PAD + (xdp->data - xdp->data_hard_start))
>> is clearly wrong since I40E_SKB_PAD already points to the offset where
>> the original xdp->data was sitting since xdp->data_hard_start is defined
>> as xdp->data - i40e_rx_offset(rx_ring) where latter offsets to I40E_SKB_PAD
>> when build skb is used.
>>
>> However, also before cc5b114dcf98 ("bpf, i40e: add meta data support")
>> this seems broken since bpf_xdp_adjust_head() helper could have been used
>> to alter headroom and enlarge / shrink the frame and with that the assumption
>> that the xdp->data remains unchanged does not hold and would push a bogus
>> packet to upper stack.
>>
>> ixgbe got this right in 924708081629 ("ixgbe: add XDP support for pass and
>> drop actions"). In any case, fix it by removing the I40E_SKB_PAD from both
>> skb_reserve() and truesize calculation.
>>
>> Fixes: cc5b114dcf98 ("bpf, i40e: add meta data support")
>> Fixes: 0c8493d90b6b ("i40e: add XDP support for pass and drop actions")
>> Reported-by: Keith Busch <keith.busch@linux.intel.com>
>> Reported-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
>> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
>> Cc: Björn Töpel <bjorn.topel@intel.com>
>> Cc: John Fastabend <john.fastabend@gmail.com>
>> ---
>> drivers/net/ethernet/intel/i40e/i40e_txrx.c | 7 +++----
>> 1 file changed, 3 insertions(+), 4 deletions(-)
>>
>
> Thanks! I missed this during review.
>
> Acked-by: John Fastabend <john.fastabend@gmail.com>
Looks good to me. Thanks for taking care of this.
Acked-by: Alexander Duyck <alexander.h.duyck@intel.com>
^ permalink raw reply
* Re: [RFC PATCH RESEND] tcp: avoid F-RTO if SACK and timestamps are disabled
From: Michal Kubecek @ 2018-06-13 16:57 UTC (permalink / raw)
To: netdev; +Cc: Eric Dumazet, Yuchung Cheng, Ilpo Jarvinen, linux-kernel
In-Reply-To: <20180613165543.0F92DA09E2@unicorn.suse.cz>
On Wed, Jun 13, 2018 at 06:55:43PM +0200, Michal Kubecek wrote:
> When F-RTO algorithm (RFC 5682) is used on connection without both SACK and
> timestamps (either because of (mis)configuration or because the other
> endpoint does not advertise them), specific pattern loss can make RTO grow
> exponentially until the sender is only able to send one packet per two
> minutes (TCP_RTO_MAX).
>
> One way to reproduce is to
>
> - make sure the connection uses neither SACK nor timestamps
> - let tp->reorder grow enough so that lost packets are retransmitted
> after RTO (rather than when high_seq - snd_una > reorder * MSS)
> - let the data flow stabilize
> - drop multiple sender packets in "every second" pattern
> - either there is no new data to send or acks received in response to new
> data are also window updates (i.e. not dupacks by definition)
>
> In this scenario, the sender keeps cycling between retransmitting first
> lost packet (step 1 of RFC 5682), sending new data by (2b) and timing out
> again. In this loop, the sender only gets
>
> (a) acks for retransmitted segments (possibly together with old ones)
> (b) window updates
>
> Without timestamps, neither can be used for RTT estimator and without SACK,
> we have no newly sacked segments to estimate RTT either. Therefore each
> timeout doubles RTO and without usable RTT samples so that there is nothing
> to counter the exponential growth.
>
> While disabling both SACK and timestamps doesn't make any sense, the
> resulting behaviour is so pathological that it deserves an improvement.
> (Also, both can be disabled on the other side.) Avoid F-RTO algorithm in
> case both SACK and timestamps are disabled so that the sender falls back to
> traditional slow start retransmission.
>
> Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
I was able to illustrate the issue using a packetdrill script. It cheats
a bit by setting net.ipv4.tcp_reordering to 30 so that it we can get to
the issue more quickly. In this case, we don't have more data to send
but it's not essential; the issue can be reproduced even with sending of
new data in F-RTO, it would only make everything more complicated.
I was able to run the same script on kernels 4.17-rc6, 4.12 (SLE15) and
4.4 (SLE12-SP2). Kernel 3.12 required minor modifications but not in the
important part (the slow start is a bit slower there).
---------------------------------------------------------------------------
--tolerance_usecs=10000
// flush cached TCP metrics
0.000 `ip tcp_metrics flush all`
+0.000 `sysctl -q net.ipv4.tcp_reordering=20`
// establish a connection
+0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0.000 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0.000 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [131072], 4) = 0
+0.000 bind(3, ..., ...) = 0
+0.000 listen(3, 1) = 0
+0.100 < S 0:0(0) win 40000 <mss 1000>
+0.000 > S. 0:0(0) ack 1 <mss 1460>
+0.100 < . 1:1(0) ack 1 win 40000
+0.000 accept(3, ..., ...) = 4
// Send 10 data segments.
+0.100 write(4, ..., 30000) = 30000
// For some reason (unknown yet), GSO packets are only 2000 bytes long
+0.000 > . 1:2001(2000) ack 1
+0.000 > . 2001:4001(2000) ack 1
+0.000 > . 4001:6001(2000) ack 1
+0.000 > . 6001:8001(2000) ack 1
+0.000 > . 8001:10001(2000) ack 1
+0.100 < . 1:1(0) ack 2001 win 38000
+0.000 > . 10001:12001(2000) ack 1
+0.000 > . 12001:14001(2000) ack 1
+0.001 < . 1:1(0) ack 4001 win 36000
+0.000 > . 14001:16001(2000) ack 1
+0.000 > . 16001:18001(2000) ack 1
+0.001 < . 1:1(0) ack 6001 win 34000
+0.000 > . 18001:20001(2000) ack 1
+0.000 > . 20001:22001(2000) ack 1
+0.001 < . 1:1(0) ack 8001 win 32000
+0.000 > . 22001:24001(2000) ack 1
+0.000 > . 24001:26001(2000) ack 1
+0.001 < . 1:1(0) ack 10001 win 30000
+0.000 > . 26001:28001(2000) ack 1
+0.000 > P. 28001:30001(2000) ack 1
// loss of 12001:13001, 14001:15001, ..., 28001:29001
+0.100 < . 1:1(0) ack 12001 win 30000 // original ack
+0.000 < . 1:1(0) ack 12001 win 30000 // 13001:14001
+0.000 < . 1:1(0) ack 12001 win 30000 // 15001:16001
+0.000 < . 1:1(0) ack 12001 win 30000 // 17001:18001
+0.000 < . 1:1(0) ack 12001 win 30000 // 19001:20001
+0.000 < . 1:1(0) ack 12001 win 30000 // 21001:22001
+0.000 < . 1:1(0) ack 12001 win 30000 // 13001:24001
+0.000 < . 1:1(0) ack 12001 win 30000 // 25001:26001
+0.000 < . 1:1(0) ack 12001 win 30000 // 27001:28001
+0.000 < . 1:1(0) ack 12001 win 30000 // 29001:30001
// RTO 300ms
+0.270~+0.330 > . 12001:13001(1000) ack 1
+0.100 < . 1:1(0) ack 14001 win 38000
// RTO 600ms
+0.540~+0.660 > . 14001:15001(1000) ack 1
+0.100 < . 1:1(0) ack 16001 win 38000
// RTO 1200ms
+1.050~+1.350 > . 16001:17001(1000) ack 1
+0.100 < . 1:1(0) ack 18001 win 38000
// RTO 2400ms
+2.100~+2.700 > . 18001:19001(1000) ack 1
+0.100 < . 1:1(0) ack 20001 win 38000
// RTO 4800ms
+4.200~+5.400 > . 20001:21001(1000) ack 1
+0.100 < . 1:1(0) ack 22001 win 38000
// RTO 9600ms
+8.400~+10.800 > . 22001:23001(1000) ack 1
+0.100 < . 1:1(0) ack 24001 win 38000
// RTO 19200ms
+16.800~+21.600 > . 24001:25001(1000) ack 1
+1.000 `sysctl -q net.ipv4.tcp_reordering=3`
---------------------------------------------------------------------------
And this is what happens on current snapshot of master branch with
either net.ipv4.tcp_frto=0 or with the RFC patch:
---------------------------------------------------------------------------
--tolerance_usecs=10000
// flush cached TCP metrics
0.000 `ip tcp_metrics flush all`
+0.000 `sysctl -q net.ipv4.tcp_reordering=20`
// establish a connection
+0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
+0.000 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
+0.000 setsockopt(3, SOL_SOCKET, SO_SNDBUF, [131072], 4) = 0
+0.000 bind(3, ..., ...) = 0
+0.000 listen(3, 1) = 0
+0.100 < S 0:0(0) win 40000 <mss 1000>
+0.000 > S. 0:0(0) ack 1 <mss 1460>
+0.100 < . 1:1(0) ack 1 win 40000
+0.000 accept(3, ..., ...) = 4
// Send 10 data segments.
+0.100 write(4, ..., 30000) = 30000
// For some reason (unknown yet), GSO packets are only 2000 bytes long
+0.000 > . 1:2001(2000) ack 1
+0.000 > . 2001:4001(2000) ack 1
+0.000 > . 4001:6001(2000) ack 1
+0.000 > . 6001:8001(2000) ack 1
+0.000 > . 8001:10001(2000) ack 1
+0.100 < . 1:1(0) ack 2001 win 38000
+0.000 > . 10001:12001(2000) ack 1
+0.000 > . 12001:14001(2000) ack 1
+0.001 < . 1:1(0) ack 4001 win 36000
+0.000 > . 14001:16001(2000) ack 1
+0.000 > . 16001:18001(2000) ack 1
+0.001 < . 1:1(0) ack 6001 win 34000
+0.000 > . 18001:20001(2000) ack 1
+0.000 > . 20001:22001(2000) ack 1
+0.001 < . 1:1(0) ack 8001 win 32000
+0.000 > . 22001:24001(2000) ack 1
+0.000 > . 24001:26001(2000) ack 1
+0.001 < . 1:1(0) ack 10001 win 30000
+0.000 > . 26001:28001(2000) ack 1
+0.000 > P. 28001:30001(2000) ack 1
// loss of 12001:13001, 14001:15001, ..., 28001:29001
+0.100 < . 1:1(0) ack 12001 win 30000 // original ack
+0.000 < . 1:1(0) ack 12001 win 30000 // 13001:14001
+0.000 < . 1:1(0) ack 12001 win 30000 // 15001:16001
+0.000 < . 1:1(0) ack 12001 win 30000 // 17001:18001
+0.000 < . 1:1(0) ack 12001 win 30000 // 19001:20001
+0.000 < . 1:1(0) ack 12001 win 30000 // 21001:22001
+0.000 < . 1:1(0) ack 12001 win 30000 // 13001:24001
+0.000 < . 1:1(0) ack 12001 win 30000 // 25001:26001
+0.000 < . 1:1(0) ack 12001 win 30000 // 27001:28001
+0.000 < . 1:1(0) ack 12001 win 30000 // 29001:30001
// RTO 300ms
+0.270~+0.330 > . 12001:13001(1000) ack 1
+0.100 < . 1:1(0) ack 14001 win 38000
+0.000 > . 14001:16001(2000) ack 1
+0.000 > . 16001:17001(1000) ack 1
+0.100 < . 1:1(0) ack 16001 win 38000
+0.000 > . 17001:18001(1000) ack 1
+0.000 > . 18001:20001(2000) ack 1
+0.000 > . 20001:21001(1000) ack 1
+0.100 < . 1:1(0) ack 18001 win 38000
+0.001 < . 1:1(0) ack 20001 win 36000
+0.001 < . 1:1(0) ack 21001 win 35000
+0.000 > . 21001:22001(1000) ack 1
+0.000 > . 22001:24001(2000) ack 1
+0.000 > . 24001:25001(1000) ack 1
+0.000 > . 25001:26001(1000) ack 1
+0.000 > . 26001:28001(2000) ack 1
+0.000 > . 28001:29001(1000) ack 1
+0.000 > P. 29001:30001(1000) ack 1
+0.100 < . 1:1(0) ack 22001 win 38000
+0.001 < . 1:1(0) ack 24001 win 36000
+0.001 < . 1:1(0) ack 26001 win 34000
+0.001 < . 1:1(0) ack 28001 win 32000
+0.001 < . 1:1(0) ack 30001 win 30000
+1.000 `sysctl -q net.ipv4.tcp_reordering=3`
---------------------------------------------------------------------------
Michal Kubecek
^ permalink raw reply
* [RFC PATCH RESEND] tcp: avoid F-RTO if SACK and timestamps are disabled
From: Michal Kubecek @ 2018-06-13 16:55 UTC (permalink / raw)
To: netdev; +Cc: Eric Dumazet, Yuchung Cheng, Ilpo Jarvinen, linux-kernel
In-Reply-To: <20180613164802.99B89A09E2@unicorn.suse.cz>
When F-RTO algorithm (RFC 5682) is used on connection without both SACK and
timestamps (either because of (mis)configuration or because the other
endpoint does not advertise them), specific pattern loss can make RTO grow
exponentially until the sender is only able to send one packet per two
minutes (TCP_RTO_MAX).
One way to reproduce is to
- make sure the connection uses neither SACK nor timestamps
- let tp->reorder grow enough so that lost packets are retransmitted
after RTO (rather than when high_seq - snd_una > reorder * MSS)
- let the data flow stabilize
- drop multiple sender packets in "every second" pattern
- either there is no new data to send or acks received in response to new
data are also window updates (i.e. not dupacks by definition)
In this scenario, the sender keeps cycling between retransmitting first
lost packet (step 1 of RFC 5682), sending new data by (2b) and timing out
again. In this loop, the sender only gets
(a) acks for retransmitted segments (possibly together with old ones)
(b) window updates
Without timestamps, neither can be used for RTT estimator and without SACK,
we have no newly sacked segments to estimate RTT either. Therefore each
timeout doubles RTO and without usable RTT samples so that there is nothing
to counter the exponential growth.
While disabling both SACK and timestamps doesn't make any sense, the
resulting behaviour is so pathological that it deserves an improvement.
(Also, both can be disabled on the other side.) Avoid F-RTO algorithm in
case both SACK and timestamps are disabled so that the sender falls back to
traditional slow start retransmission.
Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
---
net/ipv4/tcp_input.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 355d3dffd021..ed603f987b72 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -2001,7 +2001,8 @@ void tcp_enter_loss(struct sock *sk)
*/
tp->frto = net->ipv4.sysctl_tcp_frto &&
(new_recovery || icsk->icsk_retransmits) &&
- !inet_csk(sk)->icsk_mtup.probe_size;
+ !inet_csk(sk)->icsk_mtup.probe_size &&
+ (tcp_is_sack(tp) || tp->rx_opt.tstamp_ok);
}
/* If ACK arrived pointing to a remembered SACK, it means that our
--
2.17.1
^ permalink raw reply related
* Re: [PATCH 1/1] selftest: check tunnel type more accurately
From: Y Song @ 2018-06-13 16:53 UTC (permalink / raw)
To: Wang Jian; +Cc: Alexei Starovoitov, Daniel Borkmann, Shuah Khan, netdev
In-Reply-To: <CAP4sYWUcLeuGv=N2Ww8KvvyvG=2un8OH=zkn5n+kwrhkK+RRfA@mail.gmail.com>
On Wed, Jun 13, 2018 at 5:03 AM, Wang Jian <jianjian.wang1@gmail.com> wrote:
> Grep tunnel type directly to make sure 'ip' command supports it.
>
> Signed-off-by: Jian Wang <jianjian.wang1@gmail.com>
Acked-by: Yonghong Song <yhs@fb.com>
^ permalink raw reply
* Re: [PATCH 2/2] ktime: helpers to convert between ktime and jiffies
From: Florian Fainelli @ 2018-06-13 16:51 UTC (permalink / raw)
To: Tejaswi Tanikella, Andrew Lunn; +Cc: netdev, davem
In-Reply-To: <20180613133557.GA15265@tejaswit-linux.qualcomm.com>
On 06/13/2018 06:35 AM, Tejaswi Tanikella wrote:
> On Tue, Jun 12, 2018 at 06:30:32PM +0200, Andrew Lunn wrote:
>> On Mon, Jun 11, 2018 at 05:22:28PM +0530, Tejaswi Tanikella wrote:
>>> Signed-off-by: Tejaswi Tanikella <tejaswit@codeaurora.org>
>>> ---
>>> include/linux/ktime.h | 4 ++++
>>> 1 file changed, 4 insertions(+)
>>>
>>> diff --git a/include/linux/ktime.h b/include/linux/ktime.h
>>> index 5b9fddb..4881483 100644
>>> --- a/include/linux/ktime.h
>>> +++ b/include/linux/ktime.h
>>> @@ -96,6 +96,10 @@ static inline ktime_t timeval_to_ktime(struct timeval tv)
>>> /* Convert ktime_t to nanoseconds - NOP in the scalar storage format: */
>>> #define ktime_to_ns(kt) (kt)
>>>
>>> +/* ktime to jiffies and back */
>>> +#define ktime_to_jiffies(kt) nsecs_to_jiffies(kt)
>>> +#define jiffies_to_ktime(j) jiffies_to_nsecs(j)
>>
>> Hi Tejaswi
>>
>> You should also add some users of these new helpers.
>>
>> Andrew
>
> Hi Andrew,
>
> I used them in the first patch.
Therefore you must swap the order of the patches in order not to break
bisectability (that is, each commit must build on its own).
Thanks!--
Florian
^ permalink raw reply
* Re: [RFC PATCH 01/12] xen/manage: keep track of the on-going suspend mode
From: Balbir Singh @ 2018-06-13 16:42 UTC (permalink / raw)
To: Anchal Agarwal
Cc: Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
maintainer:X86 ARCHITECTURE (32-BIT AND 64-BIT), boris.ostrovsky,
konrad.wilk, roger.pau, netdev, jgross, xen-devel,
linux-kernel@vger.kernel.org, kamatam, Frank van der Linden,
vallish, guruanb, eduval, Rafael J. Wysocki, Pavel Machek,
Len Brown, linux-pm, cyberax
In-Reply-To: <20180612205619.28156-2-anchalag@amazon.com>
On Wed, Jun 13, 2018 at 6:56 AM, Anchal Agarwal <anchalag@amazon.com> wrote:
> From: Munehisa Kamata <kamatam@amazon.com>
>
> To differentiate between Xen suspend, PM suspend and PM hibernation,
> keep track of the on-going suspend mode by mainly using a new PM
> notifier. Since Xen suspend doesn't have corresponding PM event, its
> main logic is modfied to acquire pm_mutex and set the current mode.
>
Why do we need to differentiate between them? The changelog does not
explain how Xen Suspend is different from PM suspend. The difference
could be what is injected into the guest vs what the guest decides to
do. How do we use the new suspend_mode?
> Note that we may see deadlock if PM suspend/hibernation is interrupted
> by Xen suspend. PM suspend/hibernation depends on xenwatch thread to
> process xenbus state transactions, but the thread will sleep to wait
> pm_mutex which is already held by PM suspend/hibernation context in the
> scenario. Though, acquirng pm_mutex is still right thing to do, and we
> would need to modify Xen shutdown code to avoid the issue. This will be
> fixed by a separate patch.
>
> Signed-off-by: Munehisa Kamata <kamatam@amazon.com>
> Signed-off-by: Anchal Agarwal <anchalag@amazon.com>
> Reviewed-by: Sebastian Biemueller <sbiemue@amazon.com>
> Reviewed-by: Munehisa Kamata <kamatam@amazon.com>
> Reviewed-by: Eduardo Valentin <eduval@amazon.com>
> ---
> drivers/xen/manage.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 58 insertions(+)
>
> diff --git a/drivers/xen/manage.c b/drivers/xen/manage.c
> index 8835065..8f9ea87 100644
> --- a/drivers/xen/manage.c
> +++ b/drivers/xen/manage.c
> @@ -13,6 +13,7 @@
> #include <linux/freezer.h>
> #include <linux/syscore_ops.h>
> #include <linux/export.h>
> +#include <linux/suspend.h>
>
> #include <xen/xen.h>
> #include <xen/xenbus.h>
> @@ -39,6 +40,16 @@ enum shutdown_state {
> /* Ignore multiple shutdown requests. */
> static enum shutdown_state shutting_down = SHUTDOWN_INVALID;
>
> +enum suspend_modes {
> + NO_SUSPEND = 0,
> + XEN_SUSPEND,
> + PM_SUSPEND,
> + PM_HIBERNATION,
> +};
Why do the enums range across namespaces -- between NO, XEN and PM?
Can we please be consistent XEN_WATCH_SUSPEND, XEN_PM_SUSPEND. etc?
Balbir Singh.
^ permalink raw reply
* Re: [PATCH net/jkirsher] bpf, xdp, i40e: fix i40e_build_skb skb reserve and truesize
From: John Fastabend @ 2018-06-13 16:26 UTC (permalink / raw)
To: Daniel Borkmann, jeffrey.t.kirsher
Cc: intel-wired-lan, keith.busch, makita.toshiaki, bjorn.topel,
netdev
In-Reply-To: <20180613090436.4266-1-daniel@iogearbox.net>
On 06/13/2018 02:04 AM, Daniel Borkmann wrote:
> Using skb_reserve(skb, I40E_SKB_PAD + (xdp->data - xdp->data_hard_start))
> is clearly wrong since I40E_SKB_PAD already points to the offset where
> the original xdp->data was sitting since xdp->data_hard_start is defined
> as xdp->data - i40e_rx_offset(rx_ring) where latter offsets to I40E_SKB_PAD
> when build skb is used.
>
> However, also before cc5b114dcf98 ("bpf, i40e: add meta data support")
> this seems broken since bpf_xdp_adjust_head() helper could have been used
> to alter headroom and enlarge / shrink the frame and with that the assumption
> that the xdp->data remains unchanged does not hold and would push a bogus
> packet to upper stack.
>
> ixgbe got this right in 924708081629 ("ixgbe: add XDP support for pass and
> drop actions"). In any case, fix it by removing the I40E_SKB_PAD from both
> skb_reserve() and truesize calculation.
>
> Fixes: cc5b114dcf98 ("bpf, i40e: add meta data support")
> Fixes: 0c8493d90b6b ("i40e: add XDP support for pass and drop actions")
> Reported-by: Keith Busch <keith.busch@linux.intel.com>
> Reported-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
> Cc: Björn Töpel <bjorn.topel@intel.com>
> Cc: John Fastabend <john.fastabend@gmail.com>
> ---
> drivers/net/ethernet/intel/i40e/i40e_txrx.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
Thanks! I missed this during review.
Acked-by: John Fastabend <john.fastabend@gmail.com>
^ permalink raw reply
* KASAN: slab-out-of-bounds Read in bpf_skb_vlan_push
From: syzbot @ 2018-06-13 16:17 UTC (permalink / raw)
To: ast, daniel, davem, linux-kernel, netdev, syzkaller-bugs
Hello,
syzbot found the following crash on:
HEAD commit: 75d4e704fa8d netdev-FAQ: clarify DaveM's position for stab..
git tree: bpf-next
console output: https://syzkaller.appspot.com/x/log.txt?x=1754783f800000
kernel config: https://syzkaller.appspot.com/x/.config?x=a601a80fec461d44
dashboard link: https://syzkaller.appspot.com/bug?extid=76de61614cb1abdd73fc
compiler: gcc (GCC) 8.0.1 20180413 (experimental)
syzkaller repro:https://syzkaller.appspot.com/x/repro.syz?x=12c1e1bf800000
IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: syzbot+76de61614cb1abdd73fc@syzkaller.appspotmail.com
IPv6: ADDRCONF(NETDEV_CHANGE): veth1: link becomes ready
IPv6: ADDRCONF(NETDEV_CHANGE): veth0: link becomes ready
8021q: adding VLAN 0 to HW filter on device team0
8021q: adding VLAN 0 to HW filter on device team0
==================================================================
BUG: KASAN: slab-out-of-bounds in skb_at_tc_ingress
include/net/sch_generic.h:535 [inline]
BUG: KASAN: slab-out-of-bounds in bpf_push_mac_rcsum net/core/filter.c:1625
[inline]
BUG: KASAN: slab-out-of-bounds in ____bpf_skb_vlan_push
net/core/filter.c:2446 [inline]
BUG: KASAN: slab-out-of-bounds in bpf_skb_vlan_push+0x6b7/0x720
net/core/filter.c:2437
Read of size 5 at addr ffff8801b77347d0 by task syz-executor6/6529
CPU: 1 PID: 6529 Comm: syz-executor6 Not tainted 4.17.0-rc7+ #38
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS
Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1b9/0x294 lib/dump_stack.c:113
print_address_description+0x6c/0x20b mm/kasan/report.c:256
kasan_report_error mm/kasan/report.c:354 [inline]
kasan_report.cold.7+0x242/0x2fe mm/kasan/report.c:412
__asan_report_load_n_noabort+0xf/0x20 mm/kasan/report.c:443
skb_at_tc_ingress include/net/sch_generic.h:535 [inline]
bpf_push_mac_rcsum net/core/filter.c:1625 [inline]
____bpf_skb_vlan_push net/core/filter.c:2446 [inline]
bpf_skb_vlan_push+0x6b7/0x720 net/core/filter.c:2437
Allocated by task 6523:
save_stack+0x43/0xd0 mm/kasan/kasan.c:448
set_track mm/kasan/kasan.c:460 [inline]
kasan_kmalloc+0xc4/0xe0 mm/kasan/kasan.c:553
kasan_slab_alloc+0x12/0x20 mm/kasan/kasan.c:490
kmem_cache_alloc_node+0x144/0x780 mm/slab.c:3644
__alloc_skb+0x111/0x780 net/core/skbuff.c:193
alloc_skb include/linux/skbuff.h:987 [inline]
netlink_alloc_large_skb net/netlink/af_netlink.c:1182 [inline]
netlink_sendmsg+0xb01/0xfa0 net/netlink/af_netlink.c:1876
sock_sendmsg_nosec net/socket.c:629 [inline]
sock_sendmsg+0xd5/0x120 net/socket.c:639
___sys_sendmsg+0x805/0x940 net/socket.c:2117
__sys_sendmsg+0x115/0x270 net/socket.c:2155
__do_sys_sendmsg net/socket.c:2164 [inline]
__se_sys_sendmsg net/socket.c:2162 [inline]
__x64_sys_sendmsg+0x78/0xb0 net/socket.c:2162
do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x49/0xbe
Freed by task 5303:
save_stack+0x43/0xd0 mm/kasan/kasan.c:448
set_track mm/kasan/kasan.c:460 [inline]
__kasan_slab_free+0x11a/0x170 mm/kasan/kasan.c:521
kasan_slab_free+0xe/0x10 mm/kasan/kasan.c:528
__cache_free mm/slab.c:3498 [inline]
kmem_cache_free+0x86/0x2d0 mm/slab.c:3756
kfree_skbmem+0x13c/0x210 net/core/skbuff.c:582
__kfree_skb net/core/skbuff.c:642 [inline]
consume_skb+0x193/0x550 net/core/skbuff.c:701
netlink_dump+0xafa/0xd20 net/netlink/af_netlink.c:2262
netlink_recvmsg+0xe97/0x1450 net/netlink/af_netlink.c:1984
sock_recvmsg_nosec net/socket.c:802 [inline]
sock_recvmsg+0xd0/0x110 net/socket.c:809
___sys_recvmsg+0x2b6/0x680 net/socket.c:2279
__sys_recvmsg+0x112/0x260 net/socket.c:2328
__do_sys_recvmsg net/socket.c:2338 [inline]
__se_sys_recvmsg net/socket.c:2335 [inline]
__x64_sys_recvmsg+0x78/0xb0 net/socket.c:2335
do_syscall_64+0x1b1/0x800 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x49/0xbe
The buggy address belongs to the object at ffff8801b77346c0
which belongs to the cache skbuff_head_cache of size 232
The buggy address is located 40 bytes to the right of
232-byte region [ffff8801b77346c0, ffff8801b77347a8)
The buggy address belongs to the page:
page:ffffea0006ddcd00 count:1 mapcount:0 mapping:ffff8801b7734080 index:0x0
flags: 0x2fffc0000000100(slab)
raw: 02fffc0000000100 ffff8801b7734080 0000000000000000 000000010000000c
raw: ffffea00073a2da0 ffffea0006ddc060 ffff8801d942b840 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff8801b7734680: fc fc fc fc fc fc fc fc 00 00 00 00 00 00 00 00
ffff8801b7734700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> ffff8801b7734780: 00 00 00 00 00 fc fc fc fc fc fc fc fc fc fc fc
^
ffff8801b7734800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff8801b7734880: fb fb fb fb fb fb fb fb fb fb fb fb fb fc fc fc
==================================================================
---
This bug is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.
syzbot will keep track of this bug report. See:
https://goo.gl/tpsmEJ#bug-status-tracking for how to communicate with
syzbot.
syzbot can test patches for this bug, for details see:
https://goo.gl/tpsmEJ#testing-patches
^ permalink raw reply
* [PATCH net] netfilter: nf_queue: augment nfqa_cfg_policy
From: Eric Dumazet @ 2018-06-13 16:13 UTC (permalink / raw)
To: Pablo Neira Ayuso, Jozsef Kadlecsik, Florian Westphal
Cc: netfilter-devel, netdev, Eric Dumazet, Eric Dumazet
Three attributes are currently not verified, thus can trigger KMSAN
warnings such as :
BUG: KMSAN: uninit-value in __arch_swab32 arch/x86/include/uapi/asm/swab.h:10 [inline]
BUG: KMSAN: uninit-value in __fswab32 include/uapi/linux/swab.h:59 [inline]
BUG: KMSAN: uninit-value in nfqnl_recv_config+0x939/0x17d0 net/netfilter/nfnetlink_queue.c:1268
CPU: 1 PID: 4521 Comm: syz-executor120 Not tainted 4.17.0+ #5
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x185/0x1d0 lib/dump_stack.c:113
kmsan_report+0x188/0x2a0 mm/kmsan/kmsan.c:1117
__msan_warning_32+0x70/0xc0 mm/kmsan/kmsan_instr.c:620
__arch_swab32 arch/x86/include/uapi/asm/swab.h:10 [inline]
__fswab32 include/uapi/linux/swab.h:59 [inline]
nfqnl_recv_config+0x939/0x17d0 net/netfilter/nfnetlink_queue.c:1268
nfnetlink_rcv_msg+0xb2e/0xc80 net/netfilter/nfnetlink.c:212
netlink_rcv_skb+0x37e/0x600 net/netlink/af_netlink.c:2448
nfnetlink_rcv+0x2fe/0x680 net/netfilter/nfnetlink.c:513
netlink_unicast_kernel net/netlink/af_netlink.c:1310 [inline]
netlink_unicast+0x1680/0x1750 net/netlink/af_netlink.c:1336
netlink_sendmsg+0x104f/0x1350 net/netlink/af_netlink.c:1901
sock_sendmsg_nosec net/socket.c:629 [inline]
sock_sendmsg net/socket.c:639 [inline]
___sys_sendmsg+0xec8/0x1320 net/socket.c:2117
__sys_sendmsg net/socket.c:2155 [inline]
__do_sys_sendmsg net/socket.c:2164 [inline]
__se_sys_sendmsg net/socket.c:2162 [inline]
__x64_sys_sendmsg+0x331/0x460 net/socket.c:2162
do_syscall_64+0x15b/0x230 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x44/0xa9
RIP: 0033:0x43fd59
RSP: 002b:00007ffde0e30d28 EFLAGS: 00000213 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00000000004002c8 RCX: 000000000043fd59
RDX: 0000000000000000 RSI: 0000000020000080 RDI: 0000000000000003
RBP: 00000000006ca018 R08: 00000000004002c8 R09: 00000000004002c8
R10: 00000000004002c8 R11: 0000000000000213 R12: 0000000000401680
R13: 0000000000401710 R14: 0000000000000000 R15: 0000000000000000
Uninit was created at:
kmsan_save_stack_with_flags mm/kmsan/kmsan.c:279 [inline]
kmsan_internal_poison_shadow+0xb8/0x1b0 mm/kmsan/kmsan.c:189
kmsan_kmalloc+0x94/0x100 mm/kmsan/kmsan.c:315
kmsan_slab_alloc+0x10/0x20 mm/kmsan/kmsan.c:322
slab_post_alloc_hook mm/slab.h:446 [inline]
slab_alloc_node mm/slub.c:2753 [inline]
__kmalloc_node_track_caller+0xb35/0x11b0 mm/slub.c:4395
__kmalloc_reserve net/core/skbuff.c:138 [inline]
__alloc_skb+0x2cb/0x9e0 net/core/skbuff.c:206
alloc_skb include/linux/skbuff.h:988 [inline]
netlink_alloc_large_skb net/netlink/af_netlink.c:1182 [inline]
netlink_sendmsg+0x76e/0x1350 net/netlink/af_netlink.c:1876
sock_sendmsg_nosec net/socket.c:629 [inline]
sock_sendmsg net/socket.c:639 [inline]
___sys_sendmsg+0xec8/0x1320 net/socket.c:2117
__sys_sendmsg net/socket.c:2155 [inline]
__do_sys_sendmsg net/socket.c:2164 [inline]
__se_sys_sendmsg net/socket.c:2162 [inline]
__x64_sys_sendmsg+0x331/0x460 net/socket.c:2162
do_syscall_64+0x15b/0x230 arch/x86/entry/common.c:287
entry_SYSCALL_64_after_hwframe+0x44/0xa9
Fixes: fdb694a01f1f ("netfilter: Add fail-open support")
Fixes: 829e17a1a602 ("[NETFILTER]: nfnetlink_queue: allow changing queue length through netlink")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: syzbot <syzkaller@googlegroups.com>
---
net/netfilter/nfnetlink_queue.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/net/netfilter/nfnetlink_queue.c b/net/netfilter/nfnetlink_queue.c
index 4ccd2988f9db637166358335d8e26299c7237bec..ea4ba551abb28cb25c833dc408e23d1313b21bb4 100644
--- a/net/netfilter/nfnetlink_queue.c
+++ b/net/netfilter/nfnetlink_queue.c
@@ -1243,6 +1243,9 @@ static int nfqnl_recv_unsupp(struct net *net, struct sock *ctnl,
static const struct nla_policy nfqa_cfg_policy[NFQA_CFG_MAX+1] = {
[NFQA_CFG_CMD] = { .len = sizeof(struct nfqnl_msg_config_cmd) },
[NFQA_CFG_PARAMS] = { .len = sizeof(struct nfqnl_msg_config_params) },
+ [NFQA_CFG_QUEUE_MAXLEN] = { .type = NLA_U32 },
+ [NFQA_CFG_MASK] = { .type = NLA_U32 },
+ [NFQA_CFG_FLAGS] = { .type = NLA_U32 },
};
static const struct nf_queue_handler nfqh = {
--
2.18.0.rc1.242.g61856ae69a-goog
^ permalink raw reply related
* RE: [PATCH 4/4] net: emaclite: Remove xemaclite_mdio_setup return check
From: Radhey Shyam Pandey @ 2018-06-13 16:02 UTC (permalink / raw)
To: Andrew Lunn
Cc: davem@davemloft.net, michal.simek@xilinx.com,
netdev@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
In-Reply-To: <20180613072905.GE24314@lunn.ch>
> -----Original Message-----
> From: Andrew Lunn [mailto:andrew@lunn.ch]
> Sent: Wednesday, June 13, 2018 12:59 PM
> To: Radhey Shyam Pandey <radheys@xilinx.com>
> Cc: davem@davemloft.net; michal.simek@xilinx.com;
> netdev@vger.kernel.org; linux-arm-kernel@lists.infradead.org; linux-
> kernel@vger.kernel.org
> Subject: Re: [PATCH 4/4] net: emaclite: Remove xemaclite_mdio_setup return
> check
>
> On Wed, Jun 13, 2018 at 12:05:19PM +0530, Radhey Shyam Pandey wrote:
> > Errors are already reported in xemaclite_mdio_setup so avoid
> > reporting it again.
> >
> > Signed-off-by: Radhey Shyam Pandey <radhey.shyam.pandey@xilinx.com>
> > Signed-off-by: Michal Simek <michal.simek@xilinx.com>
> > ---
> > drivers/net/ethernet/xilinx/xilinx_emaclite.c | 4 +---
> > 1 files changed, 1 insertions(+), 3 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
> b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
> > index ec4608e..2a0c06e 100644
> > --- a/drivers/net/ethernet/xilinx/xilinx_emaclite.c
> > +++ b/drivers/net/ethernet/xilinx/xilinx_emaclite.c
> > @@ -1143,9 +1143,7 @@ static int xemaclite_of_probe(struct
> platform_device *ofdev)
> > xemaclite_update_address(lp, ndev->dev_addr);
> >
> > lp->phy_node = of_parse_phandle(ofdev->dev.of_node, "phy-
> handle", 0);
> > - rc = xemaclite_mdio_setup(lp, &ofdev->dev);
> > - if (rc)
> > - dev_warn(&ofdev->dev, "error registering MDIO bus\n");
> > + xemaclite_mdio_setup(lp, &ofdev->dev);
> >
> > dev_info(dev, "MAC address is now %pM\n", ndev->dev_addr);
>
> The patch itself is O.K.
>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
>
> However, do you want to keep going if the MDIO bus fails? Maybe you
> should failed the probe?
Thanks for the review. Yes, I will fix it in next series.
-Radhey
>
> Andrew
^ permalink raw reply
* (unknown),
From: Ubaithullah Masood @ 2018-06-13 15:48 UTC (permalink / raw)
Could you act as the beneficiary to claim 9.8M USD that my bank wants
to consifacte? I will give you 50% and Every documentation would be
put in placed.
Mr Ubaithullah from Hong Kong.
^ permalink raw reply
* Re: [PATCH 1/1] ip: add rmnet initial support
From: Daniele Palmas @ 2018-06-13 14:54 UTC (permalink / raw)
To: Stephen Hemminger; +Cc: netdev, Subash Abhinov Kasiviswanathan
In-Reply-To: <20180612172225.1c033767@xeon-e3>
2018-06-13 2:22 GMT+02:00 Stephen Hemminger <stephen@networkplumber.org>:
> On Tue, 12 Jun 2018 16:12:57 +0200
> Daniele Palmas <dnlplm@gmail.com> wrote:
>
>> This patch adds basic support for Qualcomm rmnet devices.
>>
>> Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
>> ---
>> ip/Makefile | 2 +-
>> ip/iplink.c | 2 +-
>> ip/iplink_rmnet.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>> 3 files changed, 72 insertions(+), 2 deletions(-)
>> create mode 100644 ip/iplink_rmnet.c
> };
>
> I am glad to see integrated tool support, but this needs to be targeted at
> the iproute2-next since it is a new feature.
>
> Some things that I would like to see changed:
> 1. All of iproute2 is now using SPDX license identifiers, you should not
> include GPL boilerplate
> 2. You should provide dump (print_opt) as well as parse routine.
> Output format should use the print_uint (json print) routines.
> 3. Please update manual page (man/man8/ip-link.8.in) to include the new
> option.
>
Thanks for the review Stephen, I'll submit a v2 for fixing those issues.
Regards,
Daniele
^ permalink raw reply
* Re: [PATCH 1/1] ip: add rmnet initial support
From: Daniele Palmas @ 2018-06-13 14:53 UTC (permalink / raw)
To: Subash Abhinov Kasiviswanathan; +Cc: netdev, Stephen Hemminger
In-Reply-To: <8be93f95bedfdf6983b6af6894eecafa@codeaurora.org>
2018-06-13 1:06 GMT+02:00 Subash Abhinov Kasiviswanathan
<subashab@codeaurora.org>:
>> +
>> +static void print_explain(FILE *f)
>> +{
>> + fprintf(f,
>> + "Usage: ... rmnet mux_id MUXID\n"
>> + "\n"
>> + "MUXID := 1-127\n"
>> + );
>> +}
>
>
> Hi Daniele
>
> This range can be from 1-254.
>
>> +
>> +static void explain(void)
>> +{
>> + print_explain(stderr);
>> +}
>> +
>> +static int rmnet_parse_opt(struct link_util *lu, int argc, char **argv,
>> + struct nlmsghdr *n)
>> +{
>> + __u16 mux_id;
>> +
>> + while (argc > 0) {
>> + if (matches(*argv, "mux_id") == 0) {
>> + NEXT_ARG();
>> + if (get_u16(&mux_id, *argv, 0))
>> + invarg("mux_id is invalid", *argv);
>> + addattr_l(n, 1024, IFLA_RMNET_MUX_ID, &mux_id, 2);
>
>
> You could use addattr16() instead since it is __u16.
>
Thanks Subash, I'll fix those in v2.
Regards,
Daniele
> --
> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
> a Linux Foundation Collaborative Project
^ permalink raw reply
* Re: [PATCH net 1/2] ipv4: igmp: use alarmtimer to prevent delayed reports
From: Andrew Lunn @ 2018-06-13 14:44 UTC (permalink / raw)
To: Tejaswi Tanikella; +Cc: netdev, f.fainelli, davem
In-Reply-To: <20180613133256.GA20232@tejaswit-linux.qualcomm.com>
> I'll try to explain my scenario. This was observed on a arm64 device.
> An application registers for a mcast group, and just listens to mcast
> packets. The connection is setup and mcast packets are being forwarded
> by the router. Multicast packets are sent out every few minutes.
> Not a very busy connection.
>
> After some time the router sends out a IGMPv2 query. The max delay in
> the header is set to 10s. The system starts a timer to send out the
> response at 9s. But the device suspends and wakes up after 60s.
>
> The response is sent out 50s late.
>
> ftrace logs with boottime trace_clock and my igmp_logs:
>
> 4740693 kworker/0:3-395 [000] ..s2 4716.425695: igmp_log: skbaddr=ffffffc156fe6600 daddr=224.0.0.1, id=0, rc=4295217721
> 4740694 kworker/0:3-395 [000] d.s4 4716.425717: timer_start:timer=ffffffc217763140 function=igmp_timer_expire expires=4295218678 [timeout=957] flags=0x00000000
> timer set for 9.57 seconds. 957 jiffies
>
> < device suspends >
>
> < wakes up after ~60s >
> 4781289 <idle>-0 [000] .ns2 4779.170886: timer_expire_entry: timer=ffffffc217763140 function=igmp_timer_expire now=4295218678
> 4781290 <idle>-0 [000] .ns2 4779.171045: igmp_log: skbaddr=ffffffc1559d0e00 daddr=227.226.228.225, id=0, rc=4295218678
>
> Since the response was delayed, mcast packets are not forwarded by the
> router.
While it has been asleep, it has also been dropping any multicast
traffic in the stream. So it does not really matter it has left the
group. You were not receiving the packets anyway.
Thing about this from another angle. I have an NTP client running on
my laptop, using multicast address 224.0.1.1. I suspend my laptop and
walk away for two hours. When i come back, i find that 20 seconds
after i suspended it, it resumed and send an group response
message. And an hour later, since it was still running, the battery
went flat.
It seems to me, the change you are proposing cannot be the default
behaviour.
I actually think you need to be looking at some sort of WoL feature.
You need the multicast stream data packets to wake you, and you also
need to wake up the IGMP query message. And you need to wake up to
send the group membership. Does your hardware have this sort of WoL
support? You can then explicitly enable this WoL for your application.
Andrew
^ permalink raw reply
* [PATCH v2 5/5] spi,can,char: add companion DT binding documentation
From: Mark Jonas @ 2018-06-13 14:37 UTC (permalink / raw)
To: Wolfgang Grandegger, Marc Kleine-Budde
Cc: linux-can, netdev, linux-kernel, hs, yi.zhu5, petar.petrovic2,
stephan.baetge, andy.shevchenko, socketcan, o.rempel, Mark Jonas
In-Reply-To: <1528900641-18677-1-git-send-email-mark.jonas@de.bosch.com>
From: Zhu Yi <yi.zhu5@cn.bosch.com>
Signed-off-by: Zhu Yi <yi.zhu5@cn.bosch.com>
Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com>
---
.../devicetree/bindings/spi/bosch,companion.txt | 82 ++++++++++++++++++++++
1 file changed, 82 insertions(+)
create mode 100644 Documentation/devicetree/bindings/spi/bosch,companion.txt
diff --git a/Documentation/devicetree/bindings/spi/bosch,companion.txt b/Documentation/devicetree/bindings/spi/bosch,companion.txt
new file mode 100644
index 0000000..5ded325
--- /dev/null
+++ b/Documentation/devicetree/bindings/spi/bosch,companion.txt
@@ -0,0 +1,82 @@
+Bosch Companion SPI slave device
+
+The functionality bases on an external peripheral chip named Companion.
+It offers two CAN interfaces, each has 8 prioritized transmit FIFOs as
+well as one receive FIFO. Besides CAN, undisclosed additional functions
+can be accessed through the char device.
+
+A standard SPI interface with two additional lines for flow control is
+used. The Companion chip is the SPI slave.
+
+The driver suite consists of three separate drivers. The following
+diagram illustrates the dependencies in layers.
+
+ /dev/companion SocketCAN User Space
+-------------------------------------------------------------------
+ +----------------+ +---------------+
+ | companion-char | | companion-can |
+ +----------------+ +---------------+
+ +----------------------------------+
+ | companion-spi |
+ +----------------------------------+
+ +----------------------------------+
+ | standard SPI subsystem |
+ +----------------------------------+ Linux Kernel
+-------------------------------------------------------------------
+ | | | | | | Hardware
+ CS-+ | | | | +-BUSY
+ CLK--+ | | +---REQUEST
+ MOSI---+ |
+ MISO-----+
+
+Required properties:
+
+- compatible : must be "bosch,companion-spi"
+- interrupt-parent : the phandle of the GPIO controller
+- interrupts : (GPIO) interrupt to which 'request-gpios' is
+ connected to
+- request-gpios : GPIO pin to request SPI master to receive data
+- busy-gpios : GPIO pin to indicate SPI slave is busy
+- cs-gpios : GPIO pin to select SPI slave
+
+Optional properties:
+
+The controller supports at most 2 CAN and 1 char device subnodes. When
+optionally specify the subnodes, the following properties are required:
+
+- CAN subnode
+ - compatible : must be "bosch,companion-can"
+ - clock-frequency: CAN device clock in Hz
+ - port : must be 0 or 1
+
+- Char device subnode
+ - compatible : must be "bosch,companion-char"
+
+Example:
+
+&ecspi1 {
+ companion-spi@0 {
+ compatible = "bosch,companion-spi";
+ interrupt-parent = <&gpio1>;
+ interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
+ request-gpios = <&gpio1 26 GPIO_ACTIVE_LOW>;
+ busy-gpios = <&gpio1 27 GPIO_ACTIVE_LOW>;
+ cs-gpios = <&gpio4 9 GPIO_ACTIVE_LOW>;
+
+ companion-can0 {
+ compatible = "bosch,companion-can";
+ clock-frequency = <28000000>;
+ port = <0>;
+ };
+
+ companion-can1 {
+ compatible = "bosch,companion-can";
+ clock-frequency = <28000000>;
+ port = <1>;
+ };
+
+ companion-char {
+ compatible = "bosch,companion-char";
+ };
+ };
+};
--
2.7.4
^ permalink raw reply related
* [PATCH v2 4/5] can: implement companion-can driver
From: Mark Jonas @ 2018-06-13 14:37 UTC (permalink / raw)
To: Wolfgang Grandegger, Marc Kleine-Budde
Cc: linux-can, netdev, linux-kernel, hs, yi.zhu5, petar.petrovic2,
stephan.baetge, andy.shevchenko, socketcan, o.rempel, Mark Jonas
In-Reply-To: <1528900641-18677-1-git-send-email-mark.jonas@de.bosch.com>
From: Zhu Yi <yi.zhu5@cn.bosch.com>
The upper level companion-can driver provides SocketCAN interface to
userspace for communicate CAN messages with the companion processor.
Signed-off-by: Zhu Yi <yi.zhu5@cn.bosch.com>
Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com>
---
drivers/net/can/Kconfig | 8 +
drivers/net/can/Makefile | 2 +
drivers/net/can/companion.c | 693 ++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 703 insertions(+)
create mode 100644 drivers/net/can/companion.c
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
index ac4ff39..e403a7e 100644
--- a/drivers/net/can/Kconfig
+++ b/drivers/net/can/Kconfig
@@ -155,6 +155,14 @@ config PCH_CAN
is an IOH for x86 embedded processor (Intel Atom E6xx series).
This driver can access CAN bus.
+config COMPANION_CAN
+ tristate "Network device for companion communication (Bosch)"
+ depends on COMPANION_SPI
+ ---help---
+ The network device allows the userspace to use SocketCAN interface
+ to communicate with the Bosch companion processor via the companion
+ SPI driver.
+
source "drivers/net/can/c_can/Kconfig"
source "drivers/net/can/cc770/Kconfig"
source "drivers/net/can/ifi_canfd/Kconfig"
diff --git a/drivers/net/can/Makefile b/drivers/net/can/Makefile
index 02b8ed7..575ea63 100644
--- a/drivers/net/can/Makefile
+++ b/drivers/net/can/Makefile
@@ -34,5 +34,7 @@ obj-$(CONFIG_CAN_SUN4I) += sun4i_can.o
obj-$(CONFIG_CAN_TI_HECC) += ti_hecc.o
obj-$(CONFIG_CAN_XILINXCAN) += xilinx_can.o
obj-$(CONFIG_PCH_CAN) += pch_can.o
+obj-$(CONFIG_COMPANION_CAN) += companion-can.o
+companion-can-objs := companion.o
subdir-ccflags-$(CONFIG_CAN_DEBUG_DEVICES) += -DDEBUG
diff --git a/drivers/net/can/companion.c b/drivers/net/can/companion.c
new file mode 100644
index 0000000..0702d24
--- /dev/null
+++ b/drivers/net/can/companion.c
@@ -0,0 +1,693 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Companion upper level can network device
+ *
+ * Copyright (C) 2015-2018 Bosch Sicherheitssysteme GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/can/dev.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/companion.h>
+
+#define TX_QUEUE_DEPTH 16
+#define NUM_TX_QUEUES 8
+#define NUM_RX_QUEUES 1
+#define TX_ECHO_SKB_MAX (NUM_TX_QUEUES * TX_QUEUE_DEPTH)
+#define DRIVER_NAME "companion-can"
+
+/**
+ * struct companion_can_priv - companion-can private data structure
+ * @can: standard common CAN private data, must be first member
+ * @parent: address of the associated parent device
+ * @dev: address of the associated network device
+ * @port: the companion CAN port number
+ * @tx_head: array of all tx queue head
+ * @tx_tail: arrat of all tx queue tail
+ */
+struct companion_can_priv {
+ struct can_priv can;
+ struct device *parent;
+ struct net_device *dev;
+ u8 port;
+ u8 tx_head[NUM_TX_QUEUES];
+ u8 tx_tail[NUM_TX_QUEUES];
+};
+
+/**
+ * companion_can_put_echo_skb() - put echo skb into ring buffer
+ * @priv: address of companion-can private data
+ * @prio: which CAN queue to put
+ * @skb: address of the packet to put
+ */
+static void companion_can_put_echo_skb(struct companion_can_priv *priv,
+ u8 prio,
+ struct sk_buff *skb)
+{
+ u8 offset = prio * TX_QUEUE_DEPTH;
+ u8 index = priv->tx_head[prio] % TX_QUEUE_DEPTH;
+
+ can_put_echo_skb(skb, priv->dev, offset + index);
+ priv->tx_head[prio]++;
+}
+
+/**
+ * companion_can_get_echo_skb() - get echo skb from ring buffer
+ * @priv: address of companion-can private data
+ * @prio: which CAN queue to get
+ */
+static u8 companion_can_get_echo_skb(struct companion_can_priv *priv, u8 prio)
+{
+ u8 offset, index, result = 0;
+
+ if (priv->tx_head[prio] != priv->tx_tail[prio]) {
+ offset = prio * TX_QUEUE_DEPTH;
+ index = priv->tx_tail[prio] % TX_QUEUE_DEPTH;
+ result = can_get_echo_skb(priv->dev, offset + index);
+ priv->tx_tail[prio]++;
+ }
+ return result;
+}
+
+/**
+ * companion_can_free_echo_skb() - free echo skb from ring buffer
+ * @priv: address of companion-can private data
+ * @prio: which CAN queue to free
+ */
+static void companion_can_free_echo_skb(struct companion_can_priv *priv,
+ u8 prio)
+{
+ u8 offset, index;
+
+ if (priv->tx_head[prio] != priv->tx_tail[prio]) {
+ offset = prio * TX_QUEUE_DEPTH;
+ index = priv->tx_tail[prio] % TX_QUEUE_DEPTH;
+ can_free_echo_skb(priv->dev, offset + index);
+ priv->tx_tail[prio]++;
+ }
+}
+
+/**
+ * companion_can_set_bittiming() - set CAN bittiming
+ * @dev: address of the associated network device
+ */
+static int companion_can_set_bittiming(struct net_device *dev)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ const struct can_bittiming *bt = &priv->can.bittiming;
+ u32 ctrl = priv->can.ctrlmode;
+ int err;
+
+ err = companion_do_set_can_bittiming(priv->parent, priv->port, bt);
+ if (err)
+ return err;
+
+ if (ctrl & CAN_CTRLMODE_LISTENONLY) {
+ err = companion_do_set_can_ctrlmode(priv->parent,
+ priv->port,
+ ctrl);
+ if (err)
+ return err;
+ }
+ return 0;
+}
+
+/**
+ * companion_can_set_mode() - set CAN mode
+ * @dev: address of the associated network device
+ * @mode: the CAN mode to set
+ */
+static int companion_can_set_mode(struct net_device *dev, enum can_mode mode)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ int err;
+
+ switch (mode) {
+ case CAN_MODE_START:
+ err = companion_can_set_bittiming(dev);
+ if (err)
+ return err;
+ /* fall through */
+
+ case CAN_MODE_STOP:
+ err = companion_do_set_can_mode(priv->parent,
+ priv->port,
+ mode);
+ if (err)
+ return err;
+ break;
+
+ default:
+ return -EOPNOTSUPP;
+ }
+ return 0;
+}
+
+/**
+ * companion_can_get_berr_counter() - get CAN error counter
+ * @dev: address of the associated network device
+ * @bec: address of the CAN error counter to store
+ */
+static int companion_can_get_berr_counter(const struct net_device *dev,
+ struct can_berr_counter *bec)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+
+ return companion_do_get_can_status(priv->parent, priv->port, bec);
+}
+
+/**
+ * companion_can_handle_state() - handle CAN state transition
+ * @dev: address of the associated network device
+ * @cf: address of the CAN frame to store CAN state
+ * @bec: address of the CAN error counter
+ * @state: the companion CAN state
+ */
+static void companion_can_handle_state(struct net_device *dev,
+ struct can_frame *cf,
+ struct can_berr_counter *bec,
+ u8 state)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ enum can_state new_state = CAN_STATE_ERROR_ACTIVE;
+ enum can_state rx_state = CAN_STATE_ERROR_ACTIVE;
+ enum can_state tx_state = CAN_STATE_ERROR_ACTIVE;
+
+ if (state & COMPANION_CAN_STATE_BUS_OFF) {
+ new_state = CAN_STATE_BUS_OFF;
+ rx_state = bec->rxerr >= bec->txerr ? new_state : rx_state;
+ tx_state = bec->txerr >= bec->rxerr ? new_state : tx_state;
+ } else if (state & COMPANION_CAN_STATE_PASSIVE) {
+ new_state = CAN_STATE_ERROR_PASSIVE;
+ rx_state = bec->rxerr > 127 ? new_state : rx_state;
+ tx_state = bec->txerr > 127 ? new_state : tx_state;
+ } else if (state & COMPANION_CAN_STATE_WARNING) {
+ new_state = CAN_STATE_ERROR_WARNING;
+ rx_state = bec->rxerr >= bec->txerr ? new_state : rx_state;
+ tx_state = bec->txerr >= bec->rxerr ? new_state : tx_state;
+ }
+
+ if (new_state != priv->can.state) {
+ can_change_state(dev, cf, tx_state, rx_state);
+
+ if (new_state == CAN_STATE_BUS_OFF)
+ can_bus_off(dev);
+ }
+}
+
+/**
+ * companion_can_handle_error() - handle CAN error
+ * @dev: address of the associated network device
+ * @cf: address of the CAN frame to store CAN error
+ * @code: the companion CAN error code
+ */
+static void companion_can_handle_error(struct net_device *dev,
+ struct can_frame *cf,
+ u8 code)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+
+ if (code & COMPANION_CAN_ERROR_RXOV) {
+ cf->can_id |= CAN_ERR_CRTL;
+ cf->data[1] |= CAN_ERR_CRTL_RX_OVERFLOW;
+ dev->stats.rx_over_errors++;
+ dev->stats.rx_errors++;
+ }
+
+ if (code & (COMPANION_CAN_ERROR_STUFF |
+ COMPANION_CAN_ERROR_FORM |
+ COMPANION_CAN_ERROR_ACK |
+ COMPANION_CAN_ERROR_BIT1 |
+ COMPANION_CAN_ERROR_BIT0 |
+ COMPANION_CAN_ERROR_CRC)) {
+ cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR;
+
+ if (code & COMPANION_CAN_ERROR_STUFF) {
+ cf->data[2] |= CAN_ERR_PROT_STUFF;
+ dev->stats.rx_errors++;
+ }
+
+ if (code & COMPANION_CAN_ERROR_FORM) {
+ cf->data[2] |= CAN_ERR_PROT_FORM;
+ dev->stats.rx_errors++;
+ }
+
+ if (code & COMPANION_CAN_ERROR_ACK) {
+ cf->can_id |= CAN_ERR_ACK;
+ cf->data[3] = CAN_ERR_PROT_LOC_ACK;
+ dev->stats.tx_errors++;
+ }
+
+ if (code & COMPANION_CAN_ERROR_BIT1) {
+ cf->data[2] |= CAN_ERR_PROT_BIT1;
+ dev->stats.tx_errors++;
+ }
+
+ if (code & COMPANION_CAN_ERROR_BIT0) {
+ cf->data[2] |= CAN_ERR_PROT_BIT0;
+ dev->stats.tx_errors++;
+ }
+
+ if (code & COMPANION_CAN_ERROR_CRC) {
+ cf->data[2] |= CAN_ERR_PROT_BIT;
+ cf->data[3] = CAN_ERR_PROT_LOC_CRC_SEQ;
+ dev->stats.rx_errors++;
+ }
+
+ priv->can.can_stats.bus_error++;
+ }
+}
+
+/**
+ * companion_can_poll_err() - poll CAN error packet from companion
+ * @dev: address of the associated network device
+ */
+static bool companion_can_poll_err(struct net_device *dev)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ struct can_berr_counter bec;
+ u8 state;
+ u8 code;
+ struct sk_buff *skb;
+ struct can_frame *cf;
+
+ if (companion_do_can_err(priv->parent,
+ priv->port,
+ &bec,
+ &state,
+ &code) != 0)
+ return false;
+
+ skb = alloc_can_err_skb(dev, &cf);
+ if (!skb) {
+ dev_err(&dev->dev, "cannot alloc err skb\n");
+ return false;
+ }
+
+ companion_can_handle_state(dev, cf, &bec, state);
+ companion_can_handle_error(dev, cf, code);
+
+ dev->stats.rx_bytes += cf->can_dlc;
+ dev->stats.rx_packets++;
+ netif_rx(skb);
+ return true;
+}
+
+/**
+ * companion_can_poll_data() - poll CAN data packet from companion
+ * @dev: address of the associated network device
+ */
+static bool companion_can_poll_data(struct net_device *dev)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ struct sk_buff *skb;
+ struct can_frame *cf;
+
+ skb = alloc_can_skb(dev, &cf);
+ if (!skb) {
+ dev_err(&dev->dev, "cannot alloc rx skb\n");
+ dev->stats.rx_dropped++;
+ return false;
+ }
+
+ if (companion_do_can_rx(priv->parent, priv->port, cf) != 0) {
+ dev_kfree_skb_any(skb);
+ return false;
+ }
+
+ dev->stats.rx_bytes += cf->can_dlc;
+ dev->stats.rx_packets++;
+ netif_rx(skb);
+ can_led_event(dev, CAN_LED_EVENT_RX);
+ return true;
+}
+
+/**
+ * companion_can_on_tx_done() - CAN tx done callback
+ * @data: address of user supplied callback data
+ * @prio: which CAN queue is done
+ * @lost_seq_sync: flag indicate lost sequence happened
+ * @success: flag indicate last send is succeed or not
+ */
+static void companion_can_on_tx_done(void *data,
+ u8 prio,
+ bool lost_seq_sync,
+ bool success)
+{
+ struct companion_can_priv *priv = data;
+ struct net_device *dev = priv->dev;
+ struct net_device_stats *stats = &dev->stats;
+ int err;
+
+ if (success) {
+ stats->tx_bytes += companion_can_get_echo_skb(priv, prio);
+ stats->tx_packets++;
+ can_led_event(dev, CAN_LED_EVENT_TX);
+ } else {
+ companion_can_free_echo_skb(priv, prio);
+ dev_err(&dev->dev, "on_tx_done(%d) failed\n", prio);
+ }
+
+ if (lost_seq_sync)
+ dev_err(&dev->dev, "txq[%d] lost sequence sync\n", prio);
+
+ err = companion_do_can_stop_tx_timer(priv->parent, priv->port, prio);
+ if (err)
+ dev_err(&dev->dev,
+ "stop txq[%d] tx timer failed: %d\n",
+ prio, err);
+
+ netif_wake_subqueue(dev, prio);
+}
+
+/**
+ * companion_can_on_rx_done() - CAN rx done callback
+ * @data: address of user supplied callback data
+ */
+static void companion_can_on_rx_done(void *data)
+{
+ struct companion_can_priv *priv = data;
+
+ while (companion_can_poll_data(priv->dev))
+ ;
+}
+
+/**
+ * companion_can_on_error() - CAN error callback
+ * @data: address of user supplied callback data
+ */
+static void companion_can_on_error(void *data)
+{
+ struct companion_can_priv *priv = data;
+
+ while (companion_can_poll_err(priv->dev))
+ ;
+}
+
+/**
+ * companion_can_on_tx_timeout() - CAN tx timeout callback
+ * @data: address of user supplied callback data
+ * @prio: which CAN queue tx timed out
+ */
+static void companion_can_on_tx_timeout(void *data, u8 prio)
+{
+ struct companion_can_priv *priv = data;
+ bool lost_txq_sync = false;
+ int err;
+
+ err = companion_do_get_can_txq_status(priv->parent,
+ priv->port,
+ prio,
+ &lost_txq_sync);
+ if (err) {
+ dev_err(&priv->dev->dev,
+ "get can txq[%d] status failed: %d\n", prio, err);
+
+ if (err != -EINVAL)
+ companion_do_can_start_tx_timer(priv->parent,
+ priv->port,
+ prio);
+ return;
+ }
+
+ if (lost_txq_sync) {
+ dev_err(&priv->dev->dev,
+ "txq[%d] out of sync, restart data flow\n", prio);
+ companion_can_free_echo_skb(priv, prio);
+ netif_wake_subqueue(priv->dev, prio);
+ } else {
+ dev_err(&priv->dev->dev,
+ "txq[%d] is sync'd, but no ack, wait again\n", prio);
+ companion_do_can_start_tx_timer(priv->parent, priv->port, prio);
+ }
+}
+
+static struct companion_can_ops companion_can_can_ops = {
+ .on_tx_done = companion_can_on_tx_done,
+ .on_rx_done = companion_can_on_rx_done,
+ .on_error = companion_can_on_error,
+ .on_tx_timeout = companion_can_on_tx_timeout,
+};
+
+/**
+ * companion_can_open() - ndo_open callback
+ * @dev: address of the associated network device
+ */
+static int companion_can_open(struct net_device *dev)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ bool has_space = false;
+ int err, i;
+
+ err = companion_can_ops_register(priv->parent,
+ priv->port,
+ &companion_can_can_ops,
+ priv);
+ if (err) {
+ dev_err(&dev->dev,
+ "companion_can_ops_register() failed: %d\n", err);
+ goto out;
+ }
+
+ err = companion_can_set_mode(dev, CAN_MODE_START);
+ if (err) {
+ dev_err(&dev->dev,
+ "companion_can_set_mode() failed: %d\n", err);
+ goto out_register;
+ }
+
+ err = companion_do_get_can_txq_status_all(priv->parent, priv->port);
+ if (err) {
+ dev_err(&dev->dev,
+ "companion_do_get_can_txq_status_all() failed: %d\n",
+ err);
+ goto out_mode;
+ }
+
+ err = open_candev(dev);
+ if (err) {
+ dev_err(&dev->dev, "open_candev() failed: %d\n", err);
+ goto out_mode;
+ }
+
+ priv->can.state = CAN_STATE_ERROR_ACTIVE;
+ can_led_event(dev, CAN_LED_EVENT_OPEN);
+
+ for (i = 0; i < NUM_TX_QUEUES; ++i) {
+ err = companion_do_can_txq_has_space(priv->parent,
+ priv->port,
+ i,
+ &has_space);
+
+ if (!err && has_space) {
+ netif_tx_start_queue(netdev_get_tx_queue(dev, i));
+ } else {
+ netif_tx_stop_queue(netdev_get_tx_queue(dev, i));
+ dev_err(&dev->dev, "txq[%d] is not started\n", i);
+ }
+ }
+
+ return 0;
+
+out_mode:
+ companion_can_set_mode(dev, CAN_MODE_STOP);
+out_register:
+ companion_can_ops_unregister(priv->parent, priv->port);
+out:
+ return err;
+}
+
+/**
+ * companion_can_release() - ndo_close callback
+ * @dev: address of the associated network device
+ */
+static int companion_can_release(struct net_device *dev)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ int err;
+
+ netif_tx_stop_all_queues(dev);
+ can_led_event(dev, CAN_LED_EVENT_STOP);
+ priv->can.state = CAN_STATE_STOPPED;
+ close_candev(dev);
+ err = companion_can_set_mode(dev, CAN_MODE_STOP);
+ companion_can_ops_unregister(priv->parent, priv->port);
+ return err;
+}
+
+/**
+ * companion_can_start_xmit() - ndo_start_xmit callback
+ * @skb: address of the packet to send
+ * @dev: address of the associated network device
+ */
+static int companion_can_start_xmit(struct sk_buff *skb,
+ struct net_device *dev)
+{
+ struct companion_can_priv *priv = netdev_priv(dev);
+ struct can_frame *cf = (struct can_frame *)skb->data;
+ u16 prio = skb_get_queue_mapping(skb);
+ bool is_full = false;
+ int err;
+
+ if (can_dropped_invalid_skb(dev, skb)) {
+ dev_err(&dev->dev, "dropped invalid skb on txq[%d]\n", prio);
+ return NETDEV_TX_OK;
+ }
+
+ err = companion_do_can_tx(priv->parent, priv->port, prio, cf);
+ if (err) {
+ dev_err(&dev->dev, "dropped packet on txq[%d]\n", prio);
+ dev_kfree_skb_any(skb);
+ dev->stats.tx_dropped++;
+ return NETDEV_TX_OK;
+ }
+
+ err = companion_do_can_txq_is_full(priv->parent,
+ priv->port,
+ prio,
+ &is_full);
+ if (!err && is_full) {
+ netif_stop_subqueue(dev, prio);
+ err = companion_do_can_start_tx_timer(priv->parent,
+ priv->port,
+ prio);
+ if (err)
+ dev_err(&dev->dev,
+ "start txq[%d] tx timer failed: %d\n",
+ prio, err);
+ }
+
+ companion_can_put_echo_skb(priv, prio, skb);
+ return NETDEV_TX_OK;
+}
+
+static const struct net_device_ops companion_can_netdev_ops = {
+ .ndo_open = companion_can_open,
+ .ndo_stop = companion_can_release,
+ .ndo_start_xmit = companion_can_start_xmit,
+};
+
+static const struct of_device_id companion_can_of_match[] = {
+ { .compatible = "bosch,companion-can", .data = NULL, },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, companion_can_of_match);
+
+static const struct can_bittiming_const companion_can_bittiming_const = {
+ .name = DRIVER_NAME,
+ .tseg1_min = 2,
+ .tseg1_max = 16,
+ .tseg2_min = 1,
+ .tseg2_max = 8,
+ .sjw_max = 4,
+ .brp_min = 1,
+ .brp_max = 1024,
+ .brp_inc = 1,
+};
+
+/**
+ * companion_can_probe() - probe callback
+ * @pdev: address of the platform device
+ */
+static int companion_can_probe(struct platform_device *pdev)
+{
+ struct device_node *node = pdev->dev.of_node;
+ struct net_device *dev;
+ struct companion_can_priv *priv;
+ u32 port, freq;
+ int err;
+
+ if (!node) {
+ dev_err(&pdev->dev, "no device tree data\n");
+ return -ENODEV;
+ }
+
+ if (of_property_read_u32(node, "port", &port)) {
+ dev_err(&pdev->dev, "no port property\n");
+ return -ENODEV;
+ }
+
+ if (port != 0 && port != 1) {
+ dev_err(&pdev->dev,
+ "invalid port %d, valid range is [0,1]\n", port);
+ return -EINVAL;
+ }
+
+ if (of_property_read_u32(node, "clock-frequency", &freq)) {
+ dev_err(&pdev->dev, "no clock-frequency property\n");
+ return -ENODEV;
+ }
+
+ if (!pdev->dev.parent) {
+ dev_err(&pdev->dev, "no parent device\n");
+ return -ENODEV;
+ }
+
+ dev = alloc_candev_mqs(sizeof(*priv),
+ TX_ECHO_SKB_MAX,
+ NUM_TX_QUEUES,
+ NUM_RX_QUEUES);
+ if (!dev)
+ return -ENOMEM;
+
+ dev->netdev_ops = &companion_can_netdev_ops;
+ dev->flags |= IFF_ECHO;
+ dev->real_num_tx_queues = NUM_TX_QUEUES;
+
+ priv = netdev_priv(dev);
+ priv->can.clock.freq = freq;
+ priv->can.bittiming_const = &companion_can_bittiming_const;
+ priv->can.do_set_mode = companion_can_set_mode;
+ priv->can.do_get_berr_counter = companion_can_get_berr_counter;
+ priv->can.ctrlmode_supported = CAN_CTRLMODE_LISTENONLY |
+ CAN_CTRLMODE_BERR_REPORTING;
+ priv->parent = pdev->dev.parent;
+ priv->dev = dev;
+ priv->port = port;
+
+ platform_set_drvdata(pdev, dev);
+ SET_NETDEV_DEV(dev, &pdev->dev);
+
+ err = register_candev(dev);
+ if (err) {
+ dev_err(&pdev->dev, "register_candev() failed: %d\n", err);
+ free_candev(dev);
+ return err;
+ }
+
+ devm_can_led_init(dev);
+ return 0;
+}
+
+/**
+ * companion_can_remove() - remove callback
+ * @pdev: address of the platform device
+ */
+static int companion_can_remove(struct platform_device *pdev)
+{
+ struct net_device *dev = platform_get_drvdata(pdev);
+
+ unregister_candev(dev);
+ free_candev(dev);
+ return 0;
+}
+
+static struct platform_driver companion_can_driver = {
+ .driver = {
+ .name = DRIVER_NAME,
+ .of_match_table = of_match_ptr(companion_can_of_match),
+ },
+ .probe = companion_can_probe,
+ .remove = companion_can_remove,
+};
+module_platform_driver(companion_can_driver);
+
+MODULE_AUTHOR("Zhu Yi <yi.zhu5@cn.bosch.com>");
+MODULE_DESCRIPTION("Companion upper level can network device");
+MODULE_LICENSE("GPL v2");
--
2.7.4
^ permalink raw reply related
* [PATCH v2 3/5] char: implement companion-char driver
From: Mark Jonas @ 2018-06-13 14:37 UTC (permalink / raw)
To: Wolfgang Grandegger, Marc Kleine-Budde
Cc: linux-can, netdev, linux-kernel, hs, yi.zhu5, petar.petrovic2,
stephan.baetge, andy.shevchenko, socketcan, o.rempel, Mark Jonas
In-Reply-To: <1528900641-18677-1-git-send-email-mark.jonas@de.bosch.com>
From: Zhu Yi <yi.zhu5@cn.bosch.com>
The upper level companion-char driver provides character device
interface to userspace for communicate IO messages with the
companion processor.
Signed-off-by: Zhu Yi <yi.zhu5@cn.bosch.com>
Signed-off-by: Mark Jonas <mark.jonas@de.bosch.com>
---
drivers/char/Kconfig | 7 +
drivers/char/Makefile | 3 +
drivers/char/companion.c | 360 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 370 insertions(+)
create mode 100644 drivers/char/companion.c
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
index c28dca0..e878d56 100644
--- a/drivers/char/Kconfig
+++ b/drivers/char/Kconfig
@@ -588,5 +588,12 @@ config TILE_SROM
source "drivers/char/xillybus/Kconfig"
+config COMPANION_CHAR
+ tristate "Character device for companion communication (Bosch)"
+ depends on COMPANION_SPI
+ help
+ The character device allows the userspace to exchange IO messages
+ with the Bosch companion processor via the companion SPI driver.
+
endmenu
diff --git a/drivers/char/Makefile b/drivers/char/Makefile
index 7dc3abe..0dae572 100644
--- a/drivers/char/Makefile
+++ b/drivers/char/Makefile
@@ -60,3 +60,6 @@ js-rtc-y = rtc.o
obj-$(CONFIG_TILE_SROM) += tile-srom.o
obj-$(CONFIG_XILLYBUS) += xillybus/
obj-$(CONFIG_POWERNV_OP_PANEL) += powernv-op-panel.o
+
+obj-$(CONFIG_COMPANION_CHAR) += companion-char.o
+companion-char-objs := companion.o
diff --git a/drivers/char/companion.c b/drivers/char/companion.c
new file mode 100644
index 0000000..2e26f01
--- /dev/null
+++ b/drivers/char/companion.c
@@ -0,0 +1,360 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Companion upper level character device
+ *
+ * Copyright (C) 2015-2018 Bosch Sicherheitssysteme GmbH
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/cdev.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/poll.h>
+#include <linux/companion.h>
+
+#define DRIVER_NAME "companion-char"
+
+static struct class *companion_char_class;
+static dev_t devt;
+
+/**
+ * struct companion_char_minor - companion-char minor structure
+ * @dev: address of the associated device
+ * @writelock: mutex to protect write
+ * @readlock: mutex to protect read
+ * @writewait: wait queue head of write
+ * @readwait: wait queue head of read
+ */
+struct companion_char_minor {
+ struct device *dev;
+ struct mutex writelock;
+ struct mutex readlock;
+ wait_queue_head_t writewait;
+ wait_queue_head_t readwait;
+};
+
+/**
+ * struct companion_char_priv - companion-char private data structure
+ * @cdev: char device
+ * @parent: address of the associated parent device
+ * @minors: address of the companion-char minor
+ */
+struct companion_char_priv {
+ struct cdev cdev;
+ struct device *parent;
+ struct companion_char_minor *minors;
+};
+
+/**
+ * companion_char_read() - read callback
+ * @filp: address of the associated virtual file
+ * @buf: address of the user space buffer to receive
+ * @count: number of bytes to read
+ * @offset: address of the read offset
+ */
+static ssize_t companion_char_read(struct file *filp,
+ char __user *buf,
+ size_t count,
+ loff_t *offset)
+{
+ unsigned int number = MINOR(file_inode(filp)->i_rdev);
+ struct companion_char_priv *priv = filp->private_data;
+ struct companion_char_minor *minor = &priv->minors[number];
+ int err;
+
+ if (count != COMPANION_PACKET_SIZE)
+ return -EMSGSIZE;
+
+ if (mutex_lock_interruptible(&minor->readlock))
+ return -ERESTARTSYS;
+
+ while (companion_io_rxq_is_empty(priv->parent)) {
+ mutex_unlock(&minor->readlock);
+ if (filp->f_flags & O_NONBLOCK)
+ return -EAGAIN;
+ if (wait_event_interruptible(minor->readwait,
+ !companion_io_rxq_is_empty(priv->parent)))
+ return -ERESTARTSYS;
+ if (mutex_lock_interruptible(&minor->readlock))
+ return -ERESTARTSYS;
+ }
+
+ err = companion_do_io_rx(priv->parent, buf, count);
+ mutex_unlock(&minor->readlock);
+ return err;
+}
+
+/**
+ * companion_char_write() - write callback
+ * @filp: address of the associated virtual file
+ * @buf: address of the user space buffer to transfer
+ * @count: number of bytes to write
+ * @offset: address of the write offset
+ */
+static ssize_t companion_char_write(struct file *filp,
+ const char __user *buf,
+ size_t count,
+ loff_t *offset)
+{
+ unsigned int number = MINOR(file_inode(filp)->i_rdev);
+ struct companion_char_priv *priv = filp->private_data;
+ struct companion_char_minor *minor = &priv->minors[number];
+ int err;
+
+ if (count != COMPANION_PACKET_SIZE)
+ return -EMSGSIZE;
+
+ if (mutex_lock_interruptible(&minor->writelock))
+ return -ERESTARTSYS;
+
+ while (companion_io_txq_is_full(priv->parent)) {
+ mutex_unlock(&minor->writelock);
+ if (filp->f_flags & O_NONBLOCK)
+ return -EAGAIN;
+ if (wait_event_interruptible(minor->writewait,
+ !companion_io_txq_is_full(priv->parent)))
+ return -ERESTARTSYS;
+ if (mutex_lock_interruptible(&minor->writelock))
+ return -ERESTARTSYS;
+ }
+
+ err = companion_do_io_tx(priv->parent, buf, count);
+ mutex_unlock(&minor->writelock);
+ return err;
+}
+
+/**
+ * companion_char_poll() - poll callback
+ * @filp: address of the associated virtual file
+ * @wait: address of the associated poll table
+ */
+static unsigned int companion_char_poll(struct file *filp, poll_table *wait)
+{
+ unsigned int number = MINOR(file_inode(filp)->i_rdev);
+ struct companion_char_priv *priv = filp->private_data;
+ struct companion_char_minor *minor = &priv->minors[number];
+ unsigned int mask = 0;
+
+ poll_wait(filp, &minor->writewait, wait);
+ poll_wait(filp, &minor->readwait, wait);
+
+ mutex_lock(&minor->writelock);
+ if (!companion_io_txq_is_full(priv->parent))
+ mask |= POLLOUT | POLLWRNORM;
+ mutex_unlock(&minor->writelock);
+
+ mutex_lock(&minor->readlock);
+ if (!companion_io_rxq_is_empty(priv->parent))
+ mask |= POLLIN | POLLRDNORM;
+ mutex_unlock(&minor->readlock);
+
+ return mask;
+}
+
+/**
+ * companion_char_open() - open callback
+ * @inode: address of the associated inode
+ * @filp: address of the associated virtual file
+ */
+static int companion_char_open(struct inode *inode, struct file *filp)
+{
+ struct companion_char_priv *priv = container_of(
+ inode->i_cdev,
+ struct companion_char_priv,
+ cdev);
+
+ filp->private_data = priv;
+ nonseekable_open(inode, filp);
+ return 0;
+}
+
+/**
+ * companion_char_release() - release callback
+ * @inode: address of the associated inode
+ * @filp: address of the associated virtual file
+ */
+static int companion_char_release(struct inode *inode, struct file *filp)
+{
+ filp->private_data = NULL;
+ return 0;
+}
+
+static const struct file_operations companion_char_ops = {
+ .owner = THIS_MODULE,
+ .llseek = no_llseek,
+ .read = companion_char_read,
+ .write = companion_char_write,
+ .poll = companion_char_poll,
+ .open = companion_char_open,
+ .release = companion_char_release,
+};
+
+/**
+ * companion_char_on_tx_done() - tx done callback
+ * @data: address of user supplied callback data
+ */
+static void companion_char_on_tx_done(void *data)
+{
+ struct companion_char_priv *priv = data;
+ struct companion_char_minor *minor = &priv->minors[0];
+
+ wake_up_interruptible(&minor->writewait);
+}
+
+/**
+ * companion_char_on_rx_done() - rx done callback
+ * @data: address of user supplied callback data
+ */
+static void companion_char_on_rx_done(void *data)
+{
+ struct companion_char_priv *priv = data;
+ struct companion_char_minor *minor = &priv->minors[0];
+
+ wake_up_interruptible(&minor->readwait);
+}
+
+static struct companion_io_ops companion_char_io_ops = {
+ .on_tx_done = companion_char_on_tx_done,
+ .on_rx_done = companion_char_on_rx_done,
+};
+
+/**
+ * companion_char_probe() - probe callback
+ * @pdev: address of the platform device
+ */
+static int companion_char_probe(struct platform_device *pdev)
+{
+ struct companion_char_priv *priv;
+ struct companion_char_minor *minors;
+ int err;
+
+ if (!pdev->dev.parent) {
+ dev_err(&pdev->dev, "no parent device found\n");
+ return -ENODEV;
+ }
+
+ priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+ priv->parent = pdev->dev.parent;
+
+ minors = devm_kzalloc(&pdev->dev, sizeof(*minors), GFP_KERNEL);
+ if (!minors)
+ return -ENOMEM;
+
+ minors->dev = device_create(companion_char_class,
+ &pdev->dev,
+ MKDEV(MAJOR(devt), 0),
+ priv,
+ "companion%d",
+ 0);
+ if (IS_ERR_OR_NULL(minors->dev))
+ return PTR_ERR_OR_ZERO(minors->dev);
+ priv->minors = minors;
+
+ mutex_init(&minors->writelock);
+ mutex_init(&minors->readlock);
+ init_waitqueue_head(&minors->writewait);
+ init_waitqueue_head(&minors->readwait);
+
+ cdev_init(&priv->cdev, &companion_char_ops);
+ err = cdev_add(&priv->cdev, MKDEV(MAJOR(devt), 0), 1);
+ if (err) {
+ dev_err(&pdev->dev, "cdev_add() failed: %d\n", err);
+ goto on_error;
+ }
+
+ dev_set_drvdata(&pdev->dev, priv);
+
+ err = companion_io_ops_register(priv->parent,
+ &companion_char_io_ops,
+ priv);
+ if (err) {
+ dev_err(&pdev->dev, "companion_io_ops_register() failed: %d\n",
+ err);
+ goto on_error;
+ }
+ return 0;
+
+on_error:
+ device_destroy(companion_char_class, MKDEV(MAJOR(devt), 0));
+ cdev_del(&priv->cdev);
+ return err;
+}
+
+/**
+ * companion_char_remove() - remove callback
+ * @pdev: address of the platform device
+ */
+static int companion_char_remove(struct platform_device *pdev)
+{
+ struct companion_char_priv *priv = dev_get_drvdata(&pdev->dev);
+
+ companion_io_ops_unregister(priv->parent);
+ device_destroy(companion_char_class, MKDEV(MAJOR(devt), 0));
+ cdev_del(&priv->cdev);
+ return 0;
+}
+
+static const struct of_device_id companion_char_of_match[] = {
+ { .compatible = "bosch,companion-char", .data = NULL, },
+ { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, companion_char_of_match);
+
+static struct platform_driver companion_char_driver = {
+ .driver = {
+ .name = DRIVER_NAME,
+ .of_match_table = of_match_ptr(companion_char_of_match),
+ },
+ .probe = companion_char_probe,
+ .remove = companion_char_remove,
+};
+
+/**
+ * companion_char_init() - module init
+ */
+static int __init companion_char_init(void)
+{
+ int err;
+
+ companion_char_class = class_create(THIS_MODULE, DRIVER_NAME);
+ if (IS_ERR_OR_NULL(companion_char_class))
+ return PTR_ERR_OR_ZERO(companion_char_class);
+
+ err = alloc_chrdev_region(&devt, 0, 1, DRIVER_NAME);
+ if (err) {
+ class_destroy(companion_char_class);
+ return err;
+ }
+
+ err = platform_driver_register(&companion_char_driver);
+ if (err) {
+ class_destroy(companion_char_class);
+ unregister_chrdev_region(devt, 1);
+ }
+
+ return err;
+}
+
+/**
+ * companion_char_exit() - module exit
+ */
+static void __exit companion_char_exit(void)
+{
+ platform_driver_unregister(&companion_char_driver);
+ class_destroy(companion_char_class);
+ unregister_chrdev_region(devt, 1);
+}
+
+module_init(companion_char_init);
+module_exit(companion_char_exit);
+
+MODULE_AUTHOR("Zhu Yi <yi.zhu5@cn.bosch.com>");
+MODULE_DESCRIPTION("Companion upper level character device");
+MODULE_LICENSE("GPL v2");
--
2.7.4
^ permalink raw reply related
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox