2019-05-19 15:51:43 +02:00
|
|
|
|
2009-09-24 09:59:20 -06:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-04-18 11:21:42 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
bpf: add initial bpf tracepoints
This work adds a number of tracepoints to paths that are either
considered slow-path or exception-like states, where monitoring or
inspecting them would be desirable.
For bpf(2) syscall, tracepoints have been placed for main commands
when they succeed. In XDP case, tracepoint is for exceptions, that
is, f.e. on abnormal BPF program exit such as unknown or XDP_ABORTED
return code, or when error occurs during XDP_TX action and the packet
could not be forwarded.
Both have been split into separate event headers, and can be further
extended. Worst case, if they unexpectedly should get into our way in
future, they can also removed [1]. Of course, these tracepoints (like
any other) can be analyzed by eBPF itself, etc. Example output:
# ./perf record -a -e bpf:* sleep 10
# ./perf script
sock_example 6197 [005] 283.980322: bpf:bpf_map_create: map type=ARRAY ufd=4 key=4 val=8 max=256 flags=0
sock_example 6197 [005] 283.980721: bpf:bpf_prog_load: prog=a5ea8fa30ea6849c type=SOCKET_FILTER ufd=5
sock_example 6197 [005] 283.988423: bpf:bpf_prog_get_type: prog=a5ea8fa30ea6849c type=SOCKET_FILTER
sock_example 6197 [005] 283.988443: bpf:bpf_map_lookup_elem: map type=ARRAY ufd=4 key=[06 00 00 00] val=[00 00 00 00 00 00 00 00]
[...]
sock_example 6197 [005] 288.990868: bpf:bpf_map_lookup_elem: map type=ARRAY ufd=4 key=[01 00 00 00] val=[14 00 00 00 00 00 00 00]
swapper 0 [005] 289.338243: bpf:bpf_prog_put_rcu: prog=a5ea8fa30ea6849c type=SOCKET_FILTER
[1] https://lwn.net/Articles/705270/
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-01-25 02:28:18 +01:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2009-01-25 18:06:26 -08:00
|
|
|
|
include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
percpu.h is included by sched.h and module.h and thus ends up being
included when building most .c files. percpu.h includes slab.h which
in turn includes gfp.h making everything defined by the two files
universally available and complicating inclusion dependencies.
percpu.h -> slab.h dependency is about to be removed. Prepare for
this change by updating users of gfp and slab facilities include those
headers directly instead of assuming availability. As this conversion
needs to touch large number of source files, the following script is
used as the basis of conversion.
http://userweb.kernel.org/~tj/misc/slabh-sweep.py
The script does the followings.
* Scan files for gfp and slab usages and update includes such that
only the necessary includes are there. ie. if only gfp is used,
gfp.h, if slab is used, slab.h.
* When the script inserts a new include, it looks at the include
blocks and try to put the new include such that its order conforms
to its surrounding. It's put in the include block which contains
core kernel includes, in the same order that the rest are ordered -
alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
doesn't seem to be any matching order.
* If the script can't find a place to put a new include (mostly
because the file doesn't have fitting include block), it prints out
an error message indicating which .h file needs to be added to the
file.
The conversion was done in the following steps.
1. The initial automatic conversion of all .c files updated slightly
over 4000 files, deleting around 700 includes and adding ~480 gfp.h
and ~3000 slab.h inclusions. The script emitted errors for ~400
files.
2. Each error was manually checked. Some didn't need the inclusion,
some needed manual addition while adding it to implementation .h or
embedding .c file was more appropriate for others. This step added
inclusions to around 150 files.
3. The script was run again and the output was compared to the edits
from #2 to make sure no file was left behind.
4. Several build tests were done and a couple of problems were fixed.
e.g. lib/decompress_*.c used malloc/free() wrappers around slab
APIs requiring slab.h to be added manually.
5. The script was run on all .h files but without automatically
editing them as sprinkling gfp.h and slab.h inclusions around .h
files could easily lead to inclusion dependency hell. Most gfp.h
inclusion directives were ignored as stuff from gfp.h was usually
wildly available and often used in preprocessor macros. Each
slab.h inclusion directive was examined and added manually as
necessary.
6. percpu.h was updated not to include slab.h.
7. Build test were done on the following configurations and failures
were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
distributed build env didn't work with gcov compiles) and a few
more options had to be turned off depending on archs to make things
build (like ipr on powerpc/64 which failed due to missing writeq).
* x86 and x86_64 UP and SMP allmodconfig and a custom test config.
* powerpc and powerpc64 SMP allmodconfig
* sparc and sparc64 SMP allmodconfig
* ia64 SMP allmodconfig
* s390 SMP allmodconfig
* alpha SMP allmodconfig
* um on x86_64 SMP allmodconfig
8. percpu.h modifications were reverted so that it could be applied as
a separate patch and serve as bisection point.
Given the fact that I had only a couple of failures from tests on step
6, I'm fairly confident about the coverage of this conversion patch.
If there is a breakage, it's likely to be something in one of the arch
headers which should be easily discoverable easily on most builds of
the specific arch.
Signed-off-by: Tejun Heo <tj@kernel.org>
Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
2010-03-24 17:04:11 +09:00
|
|
|
|
2013-01-24 23:51:31 +00:00
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
2018-01-03 11:26:04 +01:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
2023-08-02 18:02:29 -07:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2013-05-09 19:50:51 +00:00
|
|
|
|
2007-12-16 15:19:43 +02:00
|
|
|
|
|
|
|
|
|
2019-06-13 12:24:57 -04:00
|
|
|
|
2008-02-04 23:50:02 -05:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2008-02-04 23:50:02 -05:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2013-11-14 10:41:04 -08:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
|
|
|
|
|
2018-06-26 17:39:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-08-19 09:48:40 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2017-02-15 09:49:26 +01:00
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2011-11-14 14:17:08 +00:00
|
|
|
|
2009-02-04 09:02:34 +00:00
|
|
|
|
2017-08-12 22:45:53 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-22 14:36:30 +08:00
|
|
|
|
2022-12-07 13:35:58 +02:00
|
|
|
|
|
|
|
|
|
2023-03-09 10:45:59 +01:00
|
|
|
|
|
|
|
|
|
2017-08-12 22:45:53 +01:00
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2020-09-29 09:58:06 +08:00
|
|
|
|
|
|
|
|
|
2022-12-07 13:35:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-09-29 09:58:06 +08:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2018-07-31 17:43:39 +08:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:54 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2023-01-23 05:55:11 +02:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2015-08-19 09:48:40 +02:00
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2023-01-23 05:55:11 +02:00
|
|
|
|
2018-01-03 11:26:04 +01:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:49 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-04-18 11:24:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:36 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
|
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2013-01-24 23:51:29 +00:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-11-15 15:11:00 +02:00
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
2016-02-03 04:04:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2023-07-31 10:06:54 +03:00
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2022-03-28 20:53:33 +03:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2022-03-28 20:53:33 +03:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
2024-12-06 10:10:45 +09:00
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
2022-08-01 14:39:00 +08:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
2019-01-29 09:45:59 +09:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-29 09:45:59 +09:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
2019-01-29 09:45:59 +09:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
2019-01-29 09:45:59 +09:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
2019-01-29 09:45:59 +09:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:21 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-03-21 14:17:34 +00:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-03-21 14:17:34 +00:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-26 17:43:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:04 +08:00
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-12-07 13:15:15 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:04 +08:00
|
|
|
|
|
|
|
|
|
2017-12-07 13:15:15 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:04 +08:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2008-02-04 23:50:07 -05:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2008-05-26 17:48:13 +10:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:17 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-01-04 12:52:32 +00:00
|
|
|
|
2014-10-24 00:12:10 +03:00
|
|
|
|
|
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
2023-03-15 09:52:22 +08:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
2021-04-20 02:43:41 -07:00
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
2021-04-22 23:16:20 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:33 +03:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2023-03-15 09:52:22 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
|
|
|
|
|
2023-03-15 09:52:22 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
|
|
|
|
|
2021-04-20 13:01:44 -07:00
|
|
|
|
2023-05-08 14:14:17 +08:00
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-09-17 16:34:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-02 06:26:02 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:28 +08:00
|
|
|
|
networking: introduce and use skb_put_data()
A common pattern with skb_put() is to just want to memcpy()
some data into the new space, introduce skb_put_data() for
this.
An spatch similar to the one for skb_put_zero() converts many
of the places using it:
@@
identifier p, p2;
expression len, skb, data;
type t, t2;
@@
(
-p = skb_put(skb, len);
+p = skb_put_data(skb, data, len);
|
-p = (t)skb_put(skb, len);
+p = skb_put_data(skb, data, len);
)
(
p2 = (t2)p;
-memcpy(p2, data, len);
|
-memcpy(p, data, len);
)
@@
type t, t2;
identifier p, p2;
expression skb, data;
@@
t *p;
...
(
-p = skb_put(skb, sizeof(t));
+p = skb_put_data(skb, data, sizeof(t));
|
-p = (t *)skb_put(skb, sizeof(t));
+p = skb_put_data(skb, data, sizeof(t));
)
(
p2 = (t2)p;
-memcpy(p2, data, sizeof(*p));
|
-memcpy(p, data, sizeof(*p));
)
@@
expression skb, len, data;
@@
-memcpy(skb_put(skb, len), data, len);
+skb_put_data(skb, data, len);
(again, manually post-processed to retain some comments)
Reviewed-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2017-06-16 14:29:20 +02:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-20 02:43:41 -07:00
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
|
|
|
|
|
2011-09-28 04:40:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-11-08 17:47:28 +00:00
|
|
|
|
2011-09-28 04:40:54 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2023-01-14 16:22:28 +08:00
|
|
|
|
2021-04-20 02:43:41 -07:00
|
|
|
|
|
|
|
|
|
2021-04-16 17:16:15 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-27 13:52:46 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2023-09-27 13:52:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2023-09-27 13:52:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2024-09-06 20:31:35 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:21 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-26 17:43:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-29 16:46:13 +08:00
|
|
|
|
2023-12-26 17:43:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
2023-03-08 10:49:33 +08:00
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
2023-03-08 10:49:33 +08:00
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
2023-03-08 10:49:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2023-03-08 10:49:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
2023-03-08 10:49:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-03-08 10:49:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-03-08 10:49:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2023-03-08 10:49:34 +08:00
|
|
|
|
|
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-03-08 10:49:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:37 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:21 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
2024-07-08 19:25:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
2018-04-17 16:45:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-04-17 16:45:52 +02:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
2018-04-17 16:45:52 +02:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
2018-04-17 16:45:52 +02:00
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
2023-01-14 16:22:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-23 22:37:32 +08:00
|
|
|
|
2023-01-14 16:22:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
2018-02-20 14:32:15 +01:00
|
|
|
|
2018-04-17 16:45:52 +02:00
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
2018-04-17 16:45:52 +02:00
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
|
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-26 16:21:35 +08:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-26 16:21:35 +08:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-26 16:21:35 +08:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2021-08-26 16:21:35 +08:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:07 +09:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:07 +09:00
|
|
|
|
|
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
2018-05-31 10:59:47 +02:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
2018-02-20 14:32:20 +01:00
|
|
|
|
|
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
2021-03-08 12:06:58 +01:00
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
2021-03-08 12:06:58 +01:00
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
|
|
|
|
|
2018-02-20 14:32:20 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-26 16:14:01 -08:00
|
|
|
|
2019-01-29 09:45:56 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2018-07-23 23:36:08 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-08 12:06:58 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xdp: change ndo_xdp_xmit API to support bulking
This patch change the API for ndo_xdp_xmit to support bulking
xdp_frames.
When kernel is compiled with CONFIG_RETPOLINE, XDP sees a huge slowdown.
Most of the slowdown is caused by DMA API indirect function calls, but
also the net_device->ndo_xdp_xmit() call.
Benchmarked patch with CONFIG_RETPOLINE, using xdp_redirect_map with
single flow/core test (CPU E5-1650 v4 @ 3.60GHz), showed
performance improved:
for driver ixgbe: 6,042,682 pps -> 6,853,768 pps = +811,086 pps
for driver i40e : 6,187,169 pps -> 6,724,519 pps = +537,350 pps
With frames avail as a bulk inside the driver ndo_xdp_xmit call,
further optimizations are possible, like bulk DMA-mapping for TX.
Testing without CONFIG_RETPOLINE show the same performance for
physical NIC drivers.
The virtual NIC driver tun sees a huge performance boost, as it can
avoid doing per frame producer locking, but instead amortize the
locking cost over the bulk.
V2: Fix compile errors reported by kbuild test robot <lkp@intel.com>
V4: Isolated ndo, driver changes and callers.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2018-05-24 16:46:12 +02:00
|
|
|
|
2021-03-08 12:06:58 +01:00
|
|
|
|
2018-05-31 11:00:08 +02:00
|
|
|
|
2023-03-08 10:49:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:08 +09:00
|
|
|
|
|
|
|
|
|
2024-02-29 15:20:42 +08:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:08 +09:00
|
|
|
|
2018-05-31 11:00:08 +02:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2018-07-23 23:36:08 +09:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-05-08 14:14:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-05-08 14:14:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-05-08 14:14:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
2023-01-31 16:50:04 +08:00
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
2023-04-14 14:08:35 +08:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
2023-04-14 14:08:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-23 22:37:26 +08:00
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2017-03-06 21:29:47 +02:00
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-23 22:37:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
2016-12-23 22:37:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-23 22:37:26 +08:00
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2016-12-15 12:14:36 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:17 +08:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2023-05-08 14:14:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:12 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-17 21:15:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:12 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:17 +08:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:12 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-05-08 14:14:12 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-05-08 14:14:12 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2018-07-23 23:36:04 +09:00
|
|
|
|
2018-07-31 17:43:39 +08:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:15 +08:00
|
|
|
|
2018-02-20 14:32:15 +01:00
|
|
|
|
2024-09-19 16:13:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2021-05-31 21:58:52 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2021-12-16 11:11:35 +08:00
|
|
|
|
2021-05-31 21:58:52 +08:00
|
|
|
|
2021-10-09 17:32:43 +08:00
|
|
|
|
2023-05-08 14:14:15 +08:00
|
|
|
|
|
|
|
|
|
2021-10-09 17:32:43 +08:00
|
|
|
|
2023-05-08 14:14:15 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:12 +08:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2021-12-16 11:11:35 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:04 +09:00
|
|
|
|
2018-07-31 17:43:39 +08:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
2020-02-25 12:32:12 +09:00
|
|
|
|
2023-03-15 09:52:22 +08:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2023-05-08 14:14:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2023-05-08 14:14:08 +08:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-05-08 14:14:08 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-31 16:50:04 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
2023-01-31 16:50:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-31 16:50:04 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
2023-01-31 16:50:04 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2023-05-08 14:14:09 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2023-05-08 14:14:09 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-11 09:12:12 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:09 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-17 21:15:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:05 +08:00
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:05 +08:00
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2023-05-08 14:14:04 +08:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:10 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2014-10-07 16:39:48 +02:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2017-03-06 21:29:47 +02:00
|
|
|
|
|
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2018-07-23 23:36:04 +09:00
|
|
|
|
2018-07-31 17:43:39 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2023-01-31 16:50:04 +08:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
virtio_net: Add XDP frame size in two code paths
The virtio_net driver is running inside the guest-OS. There are two
XDP receive code-paths in virtio_net, namely receive_small() and
receive_mergeable(). The receive_big() function does not support XDP.
In receive_small() the frame size is available in buflen. The buffer
backing these frames are allocated in add_recvbuf_small() with same
size, except for the headroom, but tailroom have reserved room for
skb_shared_info. The headroom is encoded in ctx pointer as a value.
In receive_mergeable() the frame size is more dynamic. There are two
basic cases: (1) buffer size is based on a exponentially weighted
moving average (see DECLARE_EWMA) of packet length. Or (2) in case
virtnet_get_headroom() have any headroom then buffer size is
PAGE_SIZE. The ctx pointer is this time used for encoding two values;
the buffer len "truesize" and headroom. In case (1) if the rx buffer
size is underestimated, the packet will have been split over more
buffers (num_buf info in virtio_net_hdr_mrg_rxbuf placed in top of
buffer area). If that happens the XDP path does a xdp_linearize_page
operation.
V3: Adjust frame_sz in receive_mergeable() case, spotted by Jason Wang.
The code is really hard to follow, so some hints to reviewers.
The receive_mergeable() case gets frames that were allocated in
add_recvbuf_mergeable() which uses headroom=virtnet_get_headroom(),
and 'buf' ptr is advanced this headroom. The headroom can only
be 0 or VIRTIO_XDP_HEADROOM, as virtnet_get_headroom is really
simple:
static unsigned int virtnet_get_headroom(struct virtnet_info *vi)
{
return vi->xdp_queue_pairs ? VIRTIO_XDP_HEADROOM : 0;
}
As frame_sz is an offset size from xdp.data_hard_start, reviewers
should notice how this is calculated in receive_mergeable():
int offset = buf - page_address(page);
[...]
data = page_address(xdp_page) + offset;
xdp.data_hard_start = data - VIRTIO_XDP_HEADROOM + vi->hdr_len;
The calculated offset will always be VIRTIO_XDP_HEADROOM when
reaching this code. Thus, xdp.data_hard_start will be page-start
address plus vi->hdr_len. Given this xdp.frame_sz need to be
reduced with vi->hdr_len size.
IMHO a followup patch should cleanup this code to make it easier
to maintain and understand, but it is outside the scope of this
patchset.
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/bpf/158945344436.97035.9445115070189151680.stgit@firesoul
2020-05-14 12:50:44 +02:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2016-12-15 12:14:13 -08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
2021-05-31 21:58:52 +08:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2021-05-31 21:58:52 +08:00
|
|
|
|
|
|
|
|
|
2021-10-09 17:32:43 +08:00
|
|
|
|
2023-05-08 14:14:11 +08:00
|
|
|
|
|
|
|
|
|
2021-10-09 17:32:43 +08:00
|
|
|
|
2023-05-08 14:14:11 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:10 +08:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
2023-03-15 09:52:22 +08:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2017-12-04 14:02:19 +08:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2014-10-07 16:39:48 +02:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2017-07-19 16:54:46 +08:00
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-06 12:04:47 +03:00
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2017-03-06 21:29:47 +02:00
|
|
|
|
|
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2024-07-08 19:25:32 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
|
|
|
|
|
2015-08-19 09:48:40 +02:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-08 14:14:08 +08:00
|
|
|
|
|
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2013-11-28 13:30:55 +02:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-11 08:51:58 -04:00
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-11 08:51:58 -04:00
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:31 +08:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2024-07-08 19:25:31 +08:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
2024-06-17 21:15:24 +08:00
|
|
|
|
2011-06-10 00:56:17 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2016-06-08 16:09:21 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2019-01-17 20:08:53 -05:00
|
|
|
|
2016-06-14 08:29:38 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-31 18:25:17 +02:00
|
|
|
|
2018-07-23 23:36:04 +09:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:31 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:47 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 00:12:10 +03:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2017-07-19 16:54:47 +08:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:12 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2024-09-19 16:13:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-11-12 09:29:21 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2017-02-21 16:46:28 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
2014-09-11 10:17:36 +09:30
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-04-18 11:24:27 +08:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
2008-04-18 11:24:27 +08:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2008-04-18 11:24:27 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
2013-03-20 15:44:28 +10:30
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2008-04-18 11:24:27 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
2008-04-18 11:24:27 +08:00
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2022-03-28 20:53:33 +03:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-06-02 17:54:33 +03:00
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
2017-03-06 22:21:35 +02:00
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:12 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
|
|
|
|
|
2017-07-31 21:49:49 +03:00
|
|
|
|
2023-01-14 16:22:20 +08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:27 -08:00
|
|
|
|
2023-01-14 16:22:20 +08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:24 +08:00
|
|
|
|
2024-11-12 09:29:21 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2013-10-28 15:44:18 -07:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2011-12-29 00:42:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 00:12:10 +03:00
|
|
|
|
|
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2009-08-26 14:58:28 +05:30
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2014-10-24 00:12:10 +03:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2012-10-16 23:56:14 +10:30
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2012-12-20 08:37:04 -08:00
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
2020-05-07 03:25:56 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2020-05-07 03:25:56 -04:00
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
|
|
|
|
|
2008-02-04 23:49:57 -05:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
2011-02-10 11:03:31 -08:00
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
2011-02-10 11:03:31 -08:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-02-10 11:03:31 -08:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-25 15:59:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
2013-04-29 12:00:08 +09:30
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2014-10-24 00:12:10 +03:00
|
|
|
|
2017-04-24 13:49:26 -04:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2018-07-23 23:36:05 +09:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2017-07-19 16:54:47 +08:00
|
|
|
|
2017-03-06 21:29:47 +02:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2017-03-06 21:29:47 +02:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2024-10-29 16:46:13 +08:00
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2017-03-06 21:29:47 +02:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-08-20 02:51:23 +00:00
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-08-26 12:22:32 -07:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2018-07-23 23:36:05 +09:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2018-07-23 23:36:05 +09:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:05 +09:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2017-02-17 11:33:09 +08:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2014-07-23 16:33:54 +08:00
|
|
|
|
|
|
|
|
|
2024-07-12 04:53:25 -07:00
|
|
|
|
2017-04-24 13:49:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
2017-04-24 13:49:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-13 01:30:45 -04:00
|
|
|
|
|
|
|
|
|
2024-07-12 04:53:25 -07:00
|
|
|
|
2021-04-13 01:30:45 -04:00
|
|
|
|
2021-04-13 01:38:08 -04:00
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-13 01:38:08 -04:00
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
2021-04-13 01:38:08 -04:00
|
|
|
|
2017-04-24 13:49:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-21 17:45:52 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
dim: pass dim_sample to net_dim() by reference
net_dim() is currently passed a struct dim_sample argument by value.
struct dim_sample is 24 bytes. Since this is greater 16 bytes, x86-64
passes it on the stack. All callers have already initialized dim_sample
on the stack, so passing it by value requires pushing a duplicated copy
to the stack. Either witing to the stack and immediately reading it, or
perhaps dereferencing addresses relative to the stack pointer in a chain
of push instructions, seems to perform quite poorly.
In a heavy TCP workload, mlx5e_handle_rx_dim() consumes 3% of CPU time,
94% of which is attributed to the first push instruction to copy
dim_sample on the stack for the call to net_dim():
// Call ktime_get()
0.26 |4ead2: call 4ead7 <mlx5e_handle_rx_dim+0x47>
// Pass the address of struct dim in %rdi
|4ead7: lea 0x3d0(%rbx),%rdi
// Set dim_sample.pkt_ctr
|4eade: mov %r13d,0x8(%rsp)
// Set dim_sample.byte_ctr
|4eae3: mov %r12d,0xc(%rsp)
// Set dim_sample.event_ctr
0.15 |4eae8: mov %bp,0x10(%rsp)
// Duplicate dim_sample on the stack
94.16 |4eaed: push 0x10(%rsp)
2.79 |4eaf1: push 0x10(%rsp)
0.07 |4eaf5: push %rax
// Call net_dim()
0.21 |4eaf6: call 4eafb <mlx5e_handle_rx_dim+0x6b>
To allow the caller to reuse the struct dim_sample already on the stack,
pass the struct dim_sample by reference to net_dim().
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Reviewed-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Shannon Nelson <shannon.nelson@amd.com>
Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com>
Reviewed-by: Arthur Kiyanovski <akiyano@amazon.com>
Reviewed-by: Louis Peens <louis.peens@corigine.com>
Link: https://patch.msgid.link/20241031002326.3426181-2-csander@purestorage.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-10-30 18:23:26 -06:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-07-23 16:33:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-04-13 14:58:25 +08:00
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:07 +09:00
|
|
|
|
2018-06-26 17:39:58 +02:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2014-07-23 16:33:54 +08:00
|
|
|
|
2024-07-12 04:53:25 -07:00
|
|
|
|
2017-04-24 13:49:29 -04:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2014-07-23 16:33:54 +08:00
|
|
|
|
2023-01-25 08:48:59 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-11-19 11:20:43 -05:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2018-06-26 17:39:58 +02:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
|
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2018-04-13 14:58:25 +08:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-14 14:25:00 +02:00
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: synchronize operstate with admin state on up/down
This patch synchronizes operstate with admin state per RFC2863.
This is done by trying to toggle the carrier upon open/close and
synchronize with the config change work. This allows to propagate
status correctly to stacked devices like:
ip link add link enp0s3 macvlan0 type macvlan
ip link set link enp0s3 down
ip link show
Before this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
......
5: macvlan0@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
After this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
...
5: macvlan0@enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
Cc: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Cc: Gia-Khanh Nguyen <gia-khanh.nguyen@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20240814052228.4654-4-jasowang@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-14 13:22:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-03 11:26:04 +01:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
|
|
|
|
|
2013-05-21 20:03:58 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 00:12:10 +03:00
|
|
|
|
2013-05-21 20:03:58 +00:00
|
|
|
|
2018-01-03 11:26:04 +01:00
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
2018-01-03 11:26:04 +01:00
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
virtio-net: synchronize operstate with admin state on up/down
This patch synchronizes operstate with admin state per RFC2863.
This is done by trying to toggle the carrier upon open/close and
synchronize with the config change work. This allows to propagate
status correctly to stacked devices like:
ip link add link enp0s3 macvlan0 type macvlan
ip link set link enp0s3 down
ip link show
Before this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
......
5: macvlan0@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
After this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
...
5: macvlan0@enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
Cc: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Cc: Gia-Khanh Nguyen <gia-khanh.nguyen@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20240814052228.4654-4-jasowang@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-14 13:22:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
2021-04-13 01:35:26 -04:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2021-04-13 01:35:26 -04:00
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-13 01:35:26 -04:00
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-13 01:38:08 -04:00
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
2021-04-13 01:38:08 -04:00
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-04-13 01:35:26 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
|
|
|
|
|
2021-04-13 01:35:26 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2017-06-04 04:16:26 +02:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2008-10-27 15:59:26 -07:00
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
virtio_net: Introduce skb_vnet_common_hdr to avoid typecasting
The virtio_net driver currently deals with different versions and types
of virtio net headers, such as virtio_net_hdr_mrg_rxbuf,
virtio_net_hdr_v1_hash, etc. Due to these variations, the code relies
on multiple type casts to convert memory between different structures,
potentially leading to bugs when there are changes in these structures.
Introduces the "struct skb_vnet_common_hdr" as a unifying header
structure using a union. With this approach, various virtio net header
structures can be converted by accessing different members of this
structure, thus eliminating the need for type casting and reducing the
risk of potential bugs.
For example following code:
static struct sk_buff *page_to_skb(struct virtnet_info *vi,
struct receive_queue *rq,
struct page *page, unsigned int offset,
unsigned int len, unsigned int truesize,
unsigned int headroom)
{
[...]
struct virtio_net_hdr_mrg_rxbuf *hdr;
[...]
hdr_len = vi->hdr_len;
[...]
ok:
hdr = skb_vnet_hdr(skb);
memcpy(hdr, hdr_p, hdr_len);
[...]
}
When VIRTIO_NET_F_HASH_REPORT feature is enabled, hdr_len = 20
But the sizeof(*hdr) is 12,
memcpy(hdr, hdr_p, hdr_len); will copy 20 bytes to the hdr,
which make a potential risk of bug. And this risk can be avoided by
introducing struct skb_vnet_common_hdr.
Change log
v1->v2
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
feedback from Simon Horman <horms@kernel.org>
1. change to use net-next tree.
2. move skb_vnet_common_hdr inside kernel file instead of the UAPI header.
v2->v3
feedback from Willem de Bruijn <willemdebruijn.kernel@gmail.com>
1. fix typo in commit message.
2. add original struct virtio_net_hdr into union
3. remove virtio_net_hdr_mrg_rxbuf variable in receive_buf;
Signed-off-by: Feng Liu <feliu@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Willem de Bruijn <willemb@google.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2023-08-21 10:27:13 -04:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2016-06-08 16:09:21 +03:00
|
|
|
|
2018-06-06 11:23:01 -04:00
|
|
|
|
|
|
|
|
|
2021-06-05 11:31:00 -04:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2015-08-27 14:53:06 +08:00
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-06-04 04:16:26 +02:00
|
|
|
|
|
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-06-04 04:16:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-05-26 17:48:13 +10:00
|
|
|
|
|
|
|
|
|
2009-08-31 19:50:51 +00:00
|
|
|
|
2008-05-02 21:50:46 -05:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2012-10-16 23:56:14 +10:30
|
|
|
|
2014-10-15 16:23:28 +03:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2008-02-04 23:50:07 -05:00
|
|
|
|
|
|
|
|
|
2021-04-13 01:30:45 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-02-04 23:50:07 -05:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2021-04-13 01:30:45 -04:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2021-04-13 01:30:45 -04:00
|
|
|
|
2017-04-24 13:49:30 -04:00
|
|
|
|
2014-06-25 02:37:13 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-10-28 04:03:38 -07:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
2009-09-24 09:59:20 -06:00
|
|
|
|
2012-10-16 23:56:14 +10:30
|
|
|
|
2014-03-26 13:03:00 +08:00
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2012-10-16 23:56:14 +10:30
|
|
|
|
|
|
|
|
|
2019-04-03 12:10:13 +03:00
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
2014-03-15 18:43:33 -07:00
|
|
|
|
2010-07-02 16:34:01 +00:00
|
|
|
|
2008-05-02 21:50:46 -05:00
|
|
|
|
2009-10-28 04:03:38 -07:00
|
|
|
|
2009-09-24 09:59:20 -06:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
|
|
|
|
|
2019-09-29 20:54:03 +02:00
|
|
|
|
2017-04-24 13:49:27 -04:00
|
|
|
|
2008-05-02 21:50:46 -05:00
|
|
|
|
2023-03-08 10:49:34 +08:00
|
|
|
|
2009-09-24 09:59:20 -06:00
|
|
|
|
2024-06-18 16:44:56 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2018-07-23 23:36:09 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-08-25 15:51:53 -07:00
|
|
|
|
2009-09-24 09:59:20 -06:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:29 +08:00
|
|
|
|
2022-08-01 14:39:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2022-08-01 14:39:00 +08:00
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-07-08 19:25:29 +08:00
|
|
|
|
2022-08-01 14:39:00 +08:00
|
|
|
|
2024-07-08 19:25:29 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:29 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-06 10:10:44 +09:00
|
|
|
|
2024-07-08 19:25:29 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:30 +08:00
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:30 +08:00
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:30 +08:00
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
2024-07-08 19:25:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-06 10:10:45 +09:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:30 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:01 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-12-09 16:18:45 -08:00
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2024-04-26 11:39:21 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2024-04-26 11:39:21 +08:00
|
|
|
|
|
|
|
|
|
2024-05-30 11:41:43 +08:00
|
|
|
|
2021-07-10 11:32:49 +08:00
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
|
|
|
|
|
2013-03-20 15:44:28 +10:30
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-03-20 15:44:28 +10:30
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
2013-03-20 15:44:28 +10:30
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2013-03-20 15:44:28 +10:30
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2013-03-20 15:44:28 +10:30
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
2024-04-26 11:39:21 +08:00
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2024-04-26 11:39:21 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-07-10 11:32:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
2021-07-10 11:32:49 +08:00
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2013-10-29 09:40:02 +10:30
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-29 09:40:47 +10:30
|
|
|
|
2023-07-20 04:38:39 -04:00
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2023-07-20 04:38:39 -04:00
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
2024-05-30 11:41:43 +08:00
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
2024-05-30 11:41:43 +08:00
|
|
|
|
2013-01-21 01:17:21 +00:00
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:21 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 16:36:34 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-29 05:10:06 +00:00
|
|
|
|
2016-12-05 18:10:58 -08:00
|
|
|
|
2013-01-21 01:17:23 +00:00
|
|
|
|
2009-02-04 16:36:34 -08:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-24 00:44:58 +05:30
|
|
|
|
2016-12-05 18:10:58 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-06-29 05:10:06 +00:00
|
|
|
|
2016-12-05 18:10:58 -08:00
|
|
|
|
2009-02-04 16:36:34 -08:00
|
|
|
|
2013-01-21 01:17:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2013-01-21 01:17:23 +00:00
|
|
|
|
|
|
|
|
|
2016-12-05 18:10:58 -08:00
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:23 +00:00
|
|
|
|
2014-11-26 15:58:28 +02:00
|
|
|
|
|
|
|
|
|
2013-10-14 18:11:51 +10:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-01-21 01:17:23 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-05 18:10:58 -08:00
|
|
|
|
2009-02-04 16:36:34 -08:00
|
|
|
|
2016-12-05 18:10:58 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 16:36:34 -08:00
|
|
|
|
|
|
|
|
|
2017-01-06 19:12:52 -08:00
|
|
|
|
|
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2021-09-17 16:40:06 +08:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
|
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2012-06-05 22:35:24 +00:00
|
|
|
|
|
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-23 23:36:06 +09:00
|
|
|
|
2021-09-17 16:40:06 +08:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
|
|
|
|
|
2023-09-21 08:52:17 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
|
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:45 +03:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2024-11-04 16:57:06 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2024-11-04 16:57:06 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-04-29 12:00:08 +09:30
|
|
|
|
2024-11-04 16:57:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
|
|
|
|
|
2011-12-29 00:42:38 +00:00
|
|
|
|
|
|
|
|
|
virtio-net: synchronize operstate with admin state on up/down
This patch synchronizes operstate with admin state per RFC2863.
This is done by trying to toggle the carrier upon open/close and
synchronize with the config change work. This allows to propagate
status correctly to stacked devices like:
ip link add link enp0s3 macvlan0 type macvlan
ip link set link enp0s3 down
ip link show
Before this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
......
5: macvlan0@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
After this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
...
5: macvlan0@enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
Cc: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Cc: Gia-Khanh Nguyen <gia-khanh.nguyen@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20240814052228.4654-4-jasowang@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-14 13:22:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2023-05-12 11:18:12 -04:00
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
virtio-net: synchronize operstate with admin state on up/down
This patch synchronizes operstate with admin state per RFC2863.
This is done by trying to toggle the carrier upon open/close and
synchronize with the config change work. This allows to propagate
status correctly to stacked devices like:
ip link add link enp0s3 macvlan0 type macvlan
ip link set link enp0s3 down
ip link show
Before this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
......
5: macvlan0@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
After this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
...
5: macvlan0@enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
Cc: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Cc: Gia-Khanh Nguyen <gia-khanh.nguyen@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20240814052228.4654-4-jasowang@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-14 13:22:27 +08:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2024-05-09 13:36:34 -05:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
|
|
|
|
|
2009-05-22 23:22:17 +00:00
|
|
|
|
2010-01-25 13:36:10 -08:00
|
|
|
|
2010-02-08 04:30:35 +00:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2013-12-09 16:18:45 -08:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-15 11:31:25 -05:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2024-05-15 11:31:25 -05:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2010-01-25 13:36:10 -08:00
|
|
|
|
2010-02-08 04:30:35 +00:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2010-02-08 04:30:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2009-05-01 17:27:56 +00:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2014-10-07 16:39:48 +02:00
|
|
|
|
2009-05-22 23:22:17 +00:00
|
|
|
|
2010-01-25 13:36:10 -08:00
|
|
|
|
2009-05-22 23:22:17 +00:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
|
|
|
|
|
2010-01-25 13:36:10 -08:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
|
|
|
|
|
2010-01-25 13:36:10 -08:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2014-10-07 16:39:48 +02:00
|
|
|
|
2010-02-23 23:17:07 +00:00
|
|
|
|
2010-04-01 21:22:57 +00:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2010-02-08 04:30:35 +00:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2013-11-29 10:02:19 +01:00
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:45 +00:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-04-19 02:04:28 +00:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
2011-12-08 19:52:37 -05:00
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2013-04-19 02:04:28 +00:00
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2013-12-09 16:17:40 -08:00
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
2011-12-08 19:52:37 -05:00
|
|
|
|
2009-02-04 09:02:50 +00:00
|
|
|
|
|
|
|
|
|
2019-03-18 14:56:06 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2013-01-24 23:51:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-08-09 18:18:28 -07:00
|
|
|
|
|
|
|
|
|
2013-01-24 23:51:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
2019-03-18 14:56:06 +08:00
|
|
|
|
2013-01-24 23:51:30 +00:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-14 14:17:05 -07:00
|
|
|
|
2018-08-08 20:07:35 -07:00
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-03-18 19:37:46 +01:00
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2013-01-24 23:51:30 +00:00
|
|
|
|
2018-08-09 17:28:40 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
2013-01-24 23:51:31 +00:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-01-24 23:51:31 +00:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-15 11:18:58 +08:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-03-18 14:56:06 +08:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-01 21:23:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-01 21:23:37 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-19 08:10:59 +00:00
|
|
|
|
2021-11-18 20:12:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-19 08:10:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:38:58 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-19 08:10:59 +00:00
|
|
|
|
|
|
|
|
|
2022-08-01 14:39:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-01 21:23:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:43 +08:00
|
|
|
|
2022-08-01 14:39:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:43 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2024-08-01 21:23:38 +08:00
|
|
|
|
2023-10-08 14:27:43 +08:00
|
|
|
|
2022-08-01 14:39:02 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-10-19 08:10:59 +00:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:36 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-11-04 16:57:06 +08:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-11-14 14:17:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-30 22:14:52 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-11-14 14:17:08 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-04-18 13:45:41 +08:00
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-03 16:16:04 +02:00
|
|
|
|
2024-05-03 23:24:45 +03:00
|
|
|
|
2020-12-22 21:54:21 -05:00
|
|
|
|
2021-08-03 16:16:04 +02:00
|
|
|
|
2020-12-22 21:54:21 -05:00
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
2020-12-22 21:54:21 -05:00
|
|
|
|
2021-08-03 16:16:04 +02:00
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
2020-12-22 21:54:21 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-10-16 13:27:07 -04:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2021-03-16 17:31:29 -07:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2024-04-26 11:39:25 +08:00
|
|
|
|
2022-10-26 15:22:14 +02:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2024-04-26 11:39:26 +08:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-21 23:24:24 +01:00
|
|
|
|
|
|
|
|
|
2016-02-03 04:04:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-02-28 14:12:05 -06:00
|
|
|
|
|
|
|
|
|
2016-02-03 04:04:37 +01:00
|
|
|
|
|
|
|
|
|
2017-03-21 23:24:24 +01:00
|
|
|
|
|
|
|
|
|
2016-02-03 04:04:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-21 23:24:24 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-03 04:04:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:05 +08:00
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2023-12-11 18:36:05 +08:00
|
|
|
|
2023-10-08 14:27:41 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:54 +03:00
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:41 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2023-12-11 18:36:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2023-12-11 18:36:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2023-07-31 10:06:54 +03:00
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:41 +08:00
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
2023-10-08 14:27:41 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2024-05-28 21:41:16 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2023-10-08 14:27:42 +08:00
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
2023-12-11 18:36:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:42 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:43 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-03 23:24:43 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2024-05-03 23:24:43 +03:00
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
2024-05-03 23:24:43 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-03 23:24:43 +03:00
|
|
|
|
2024-05-28 21:41:15 +08:00
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:44 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
2021-08-20 15:35:18 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:25 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:25 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-20 15:35:18 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2023-07-31 10:06:54 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:40 +08:00
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-02-03 04:04:37 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2023-12-12 17:33:14 -07:00
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:36 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-09-02 01:03:33 -07:00
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
2023-12-11 18:36:07 +08:00
|
|
|
|
2011-11-14 14:17:08 +00:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
2011-10-19 08:10:59 +00:00
|
|
|
|
2022-08-01 14:39:02 +08:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:57 +00:00
|
|
|
|
|
|
|
|
|
2014-06-25 02:37:13 +00:00
|
|
|
|
2017-03-21 23:24:24 +01:00
|
|
|
|
|
|
|
|
|
2018-10-09 10:06:26 +08:00
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:55 +03:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:36 +03:00
|
|
|
|
2008-04-18 11:21:42 +08:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Add TX stopped and wake counters
Add a tx queue stop and wake counters, they are useful for debugging.
$ ./tools/net/ynl/cli.py --spec netlink/specs/netdev.yaml \
--dump qstats-get --json '{"scope": "queue"}'
...
{'ifindex': 13,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 14756682850,
'tx-packets': 226465,
'tx-stop': 113208,
'tx-wake': 113208},
{'ifindex': 13,
'queue-id': 1,
'queue-type': 'tx',
'tx-bytes': 18167675008,
'tx-packets': 278660,
'tx-stop': 8632,
'tx-wake': 8632}]
Signed-off-by: Daniel Jurgens <danielj@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jason Xing <kerneljasonxing@gmail.com>
Link: https://lore.kernel.org/r/20240510201927.1821109-3-danielj@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-05-10 23:19:27 +03:00
|
|
|
|
|
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2018-10-17 19:44:12 +09:00
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2018-10-17 19:44:12 +09:00
|
|
|
|
2022-06-21 13:48:44 +02:00
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-06-21 13:48:44 +02:00
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2022-06-21 13:48:44 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
|
|
|
|
|
2018-10-17 19:44:12 +09:00
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2018-10-17 19:44:12 +09:00
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-04-03 12:10:13 +03:00
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-06 10:10:46 +09:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-06 10:10:47 +09:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:24 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:35 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-30 21:46:48 -07:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2024-07-08 19:25:28 +08:00
|
|
|
|
2023-01-14 16:22:21 +08:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
2017-02-20 11:50:20 +08:00
|
|
|
|
2016-12-15 12:13:49 -08:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-22 14:36:31 +08:00
|
|
|
|
2022-12-07 13:35:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-05-03 00:39:17 +02:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-14 16:22:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:49 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-09-18 14:06:15 +08:00
|
|
|
|
|
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2016-12-15 12:13:49 -08:00
|
|
|
|
|
|
|
|
|
2019-01-29 09:45:57 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-11-17 09:28:03 -08:00
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
|
|
|
|
|
2018-02-28 18:20:04 +08:00
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2019-01-29 09:45:57 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2024-05-03 23:24:45 +03:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
|
|
|
|
|
2019-01-29 09:45:55 +09:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2016-12-15 12:13:49 -08:00
|
|
|
|
2019-01-29 09:45:57 +09:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2019-01-29 09:45:57 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:49 +08:00
|
|
|
|
|
|
|
|
|
drivers: net: turn on XDP features
A summary of the flags being set for various drivers is given below.
Note that XDP_F_REDIRECT_TARGET and XDP_F_FRAG_TARGET are features
that can be turned off and on at runtime. This means that these flags
may be set and unset under RTNL lock protection by the driver. Hence,
READ_ONCE must be used by code loading the flag value.
Also, these flags are not used for synchronization against the availability
of XDP resources on a device. It is merely a hint, and hence the read
may race with the actual teardown of XDP resources on the device. This
may change in the future, e.g. operations taking a reference on the XDP
resources of the driver, and in turn inhibiting turning off this flag.
However, for now, it can only be used as a hint to check whether device
supports becoming a redirection target.
Turn 'hw-offload' feature flag on for:
- netronome (nfp)
- netdevsim.
Turn 'native' and 'zerocopy' features flags on for:
- intel (i40e, ice, ixgbe, igc)
- mellanox (mlx5).
- stmmac
- netronome (nfp)
Turn 'native' features flags on for:
- amazon (ena)
- broadcom (bnxt)
- freescale (dpaa, dpaa2, enetc)
- funeth
- intel (igb)
- marvell (mvneta, mvpp2, octeontx2)
- mellanox (mlx4)
- mtk_eth_soc
- qlogic (qede)
- sfc
- socionext (netsec)
- ti (cpsw)
- tap
- tsnep
- veth
- xen
- virtio_net.
Turn 'basic' (tx, pass, aborted and drop) features flags on for:
- netronome (nfp)
- cavium (thunder)
- hyperv.
Turn 'redirect_target' feature flag on for:
- amanzon (ena)
- broadcom (bnxt)
- freescale (dpaa, dpaa2)
- intel (i40e, ice, igb, ixgbe)
- ti (cpsw)
- marvell (mvneta, mvpp2)
- sfc
- socionext (netsec)
- qlogic (qede)
- mellanox (mlx5)
- tap
- veth
- virtio_net
- xen
Reviewed-by: Gerhard Engleder <gerhard@engleder-embedded.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Acked-by: Stanislav Fomichev <sdf@google.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Co-developed-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Marek Majtyka <alardam@gmail.com>
Link: https://lore.kernel.org/r/3eca9fafb308462f7edb1f58e451d59209aa07eb.1675245258.git.lorenzo@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-01 11:24:18 +01:00
|
|
|
|
2023-02-07 10:53:40 +01:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
drivers: net: turn on XDP features
A summary of the flags being set for various drivers is given below.
Note that XDP_F_REDIRECT_TARGET and XDP_F_FRAG_TARGET are features
that can be turned off and on at runtime. This means that these flags
may be set and unset under RTNL lock protection by the driver. Hence,
READ_ONCE must be used by code loading the flag value.
Also, these flags are not used for synchronization against the availability
of XDP resources on a device. It is merely a hint, and hence the read
may race with the actual teardown of XDP resources on the device. This
may change in the future, e.g. operations taking a reference on the XDP
resources of the driver, and in turn inhibiting turning off this flag.
However, for now, it can only be used as a hint to check whether device
supports becoming a redirection target.
Turn 'hw-offload' feature flag on for:
- netronome (nfp)
- netdevsim.
Turn 'native' and 'zerocopy' features flags on for:
- intel (i40e, ice, ixgbe, igc)
- mellanox (mlx5).
- stmmac
- netronome (nfp)
Turn 'native' features flags on for:
- amazon (ena)
- broadcom (bnxt)
- freescale (dpaa, dpaa2, enetc)
- funeth
- intel (igb)
- marvell (mvneta, mvpp2, octeontx2)
- mellanox (mlx4)
- mtk_eth_soc
- qlogic (qede)
- sfc
- socionext (netsec)
- ti (cpsw)
- tap
- tsnep
- veth
- xen
- virtio_net.
Turn 'basic' (tx, pass, aborted and drop) features flags on for:
- netronome (nfp)
- cavium (thunder)
- hyperv.
Turn 'redirect_target' feature flag on for:
- amanzon (ena)
- broadcom (bnxt)
- freescale (dpaa, dpaa2)
- intel (i40e, ice, igb, ixgbe)
- ti (cpsw)
- marvell (mvneta, mvpp2)
- sfc
- socionext (netsec)
- qlogic (qede)
- mellanox (mlx5)
- tap
- veth
- virtio_net
- xen
Reviewed-by: Gerhard Engleder <gerhard@engleder-embedded.com>
Reviewed-by: Simon Horman <simon.horman@corigine.com>
Acked-by: Stanislav Fomichev <sdf@google.com>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Co-developed-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Signed-off-by: Kumar Kartikeya Dwivedi <memxor@gmail.com>
Co-developed-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Marek Majtyka <alardam@gmail.com>
Link: https://lore.kernel.org/r/3eca9fafb308462f7edb1f58e451d59209aa07eb.1675245258.git.lorenzo@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
2023-02-01 11:24:18 +01:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2019-01-29 09:45:57 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
2018-02-28 18:20:04 +08:00
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
2017-07-19 16:54:48 +08:00
|
|
|
|
2019-01-29 09:45:57 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-29 09:45:53 +09:00
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
2019-01-29 09:45:53 +09:00
|
|
|
|
virtio_net: Don't call free_old_xmit_skbs for xdp_frames
When napi_tx is enabled, virtnet_poll_cleantx() called
free_old_xmit_skbs() even for xdp send queue.
This is bogus since the queue has xdp_frames, not sk_buffs, thus mangled
device tx bytes counters because skb->len is meaningless value, and even
triggered oops due to general protection fault on freeing them.
Since xdp send queues do not aquire locks, old xdp_frames should be
freed only in virtnet_xdp_xmit(), so just skip free_old_xmit_skbs() for
xdp send queues.
Similarly virtnet_poll_tx() called free_old_xmit_skbs(). This NAPI
handler is called even without calling start_xmit() because cb for tx is
by default enabled. Once the handler is called, it enabled the cb again,
and then the handler would be called again. We don't need this handler
for XDP, so don't enable cb as well as not calling free_old_xmit_skbs().
Also, we need to disable tx NAPI when disabling XDP, so
virtnet_poll_tx() can safely access curr_queue_pairs and
xdp_queue_pairs, which are not atomically updated while disabling XDP.
Fixes: b92f1e6751a6 ("virtio-net: transmit napi")
Fixes: 7b0411ef4aa6 ("virtio-net: clean tx descriptors from rx napi")
Signed-off-by: Toshiaki Makita <makita.toshiaki@lab.ntt.co.jp>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-01-29 09:45:54 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-29 09:45:53 +09:00
|
|
|
|
2017-02-02 19:16:29 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
2017-11-03 13:56:16 -07:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-04-30 21:46:48 -07:00
|
|
|
|
2024-07-08 19:25:33 +08:00
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-21 10:30:43 -04:00
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
|
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2021-03-10 10:24:45 +08:00
|
|
|
|
2020-10-21 10:30:43 -04:00
|
|
|
|
|
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2020-10-21 10:30:43 -04:00
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
2020-10-21 10:30:43 -04:00
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2020-10-21 10:30:43 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2024-05-03 23:24:40 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-09-17 16:40:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-26 17:18:40 +00:00
|
|
|
|
2021-09-17 16:40:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-11-16 19:29:22 -08:00
|
|
|
|
2021-09-17 16:40:06 +08:00
|
|
|
|
|
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-01-06 10:44:22 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-04 16:36:34 -08:00
|
|
|
|
2009-02-04 09:02:40 +00:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
2009-05-01 17:31:10 +00:00
|
|
|
|
|
|
|
|
|
2017-11-03 13:56:16 -07:00
|
|
|
|
2017-09-19 17:42:43 +08:00
|
|
|
|
2024-07-08 19:25:34 +08:00
|
|
|
|
2017-05-23 13:38:43 -04:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
2021-09-17 16:40:06 +08:00
|
|
|
|
2009-01-06 10:44:22 -08:00
|
|
|
|
|
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
|
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
|
|
|
|
|
2013-10-14 18:11:51 +10:30
|
|
|
|
|
|
|
|
|
2014-10-15 10:22:30 +10:30
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
|
|
|
|
|
2012-08-09 22:14:56 +00:00
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
|
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-15 10:22:30 +10:30
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-05 17:44:54 -05:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-08-20 14:51:24 -07:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2013-12-05 18:36:21 +04:00
|
|
|
|
|
|
|
|
|
2015-03-12 13:57:44 +08:00
|
|
|
|
2020-09-09 10:37:51 -07:00
|
|
|
|
|
|
|
|
|
2015-03-12 13:57:44 +08:00
|
|
|
|
2013-12-05 18:36:21 +04:00
|
|
|
|
2020-09-09 10:37:51 -07:00
|
|
|
|
2016-11-15 22:24:12 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2017-02-02 19:14:32 -08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2017-02-02 19:14:32 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-15 12:13:24 -08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2024-10-29 16:46:15 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
|
|
|
|
|
2022-08-01 14:38:59 +08:00
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
2024-12-06 10:10:43 +09:00
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:38:59 +08:00
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-11-12 09:29:23 +08:00
|
|
|
|
2022-08-01 14:38:59 +08:00
|
|
|
|
|
|
|
|
|
2024-12-06 10:10:45 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-08-01 14:38:59 +08:00
|
|
|
|
|
|
|
|
|
2023-05-04 10:27:06 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-12-26 17:43:33 +08:00
|
|
|
|
2023-08-10 20:30:57 +08:00
|
|
|
|
2023-12-26 17:43:33 +08:00
|
|
|
|
|
|
|
|
|
2023-05-04 10:27:06 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-03-18 14:56:06 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:33 +03:00
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-06-02 17:54:33 +03:00
|
|
|
|
|
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
virtio_net: Fix "‘%d’ directive writing between 1 and 11 bytes into a region of size 10" warnings
Fix the warnings when building virtio_net driver.
"
drivers/net/virtio_net.c: In function ‘init_vqs’:
drivers/net/virtio_net.c:4551:48: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 10 [-Wformat-overflow=]
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~
In function ‘virtnet_find_vqs’,
inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
drivers/net/virtio_net.c:4551:41: note: directive argument in the range [-2147483643, 65534]
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~~~~~~~~~
drivers/net/virtio_net.c:4551:17: note: ‘sprintf’ output between 8 and 18 bytes into a destination of size 16
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c: In function ‘init_vqs’:
drivers/net/virtio_net.c:4552:49: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 9 [-Wformat-overflow=]
4552 | sprintf(vi->sq[i].name, "output.%d", i);
| ^~
In function ‘virtnet_find_vqs’,
inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
drivers/net/virtio_net.c:4552:41: note: directive argument in the range [-2147483643, 65534]
4552 | sprintf(vi->sq[i].name, "output.%d", i);
| ^~~~~~~~~~~
drivers/net/virtio_net.c:4552:17: note: ‘sprintf’ output between 9 and 19 bytes into a destination of size 16
4552 | sprintf(vi->sq[i].name, "output.%d", i);
"
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Link: https://lore.kernel.org/r/20240104020902.2753599-1-yanjun.zhu@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-01-04 10:09:02 +08:00
|
|
|
|
|
|
|
|
|
2017-03-06 20:31:21 +02:00
|
|
|
|
virtio_net: Fix "‘%d’ directive writing between 1 and 11 bytes into a region of size 10" warnings
Fix the warnings when building virtio_net driver.
"
drivers/net/virtio_net.c: In function ‘init_vqs’:
drivers/net/virtio_net.c:4551:48: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 10 [-Wformat-overflow=]
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~
In function ‘virtnet_find_vqs’,
inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
drivers/net/virtio_net.c:4551:41: note: directive argument in the range [-2147483643, 65534]
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~~~~~~~~~
drivers/net/virtio_net.c:4551:17: note: ‘sprintf’ output between 8 and 18 bytes into a destination of size 16
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c: In function ‘init_vqs’:
drivers/net/virtio_net.c:4552:49: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 9 [-Wformat-overflow=]
4552 | sprintf(vi->sq[i].name, "output.%d", i);
| ^~
In function ‘virtnet_find_vqs’,
inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
drivers/net/virtio_net.c:4552:41: note: directive argument in the range [-2147483643, 65534]
4552 | sprintf(vi->sq[i].name, "output.%d", i);
| ^~~~~~~~~~~
drivers/net/virtio_net.c:4552:17: note: ‘sprintf’ output between 9 and 19 bytes into a destination of size 16
4552 | sprintf(vi->sq[i].name, "output.%d", i);
"
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Link: https://lore.kernel.org/r/20240104020902.2753599-1-yanjun.zhu@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-01-04 10:09:02 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
treewide: kzalloc() -> kcalloc()
The kzalloc() function has a 2-factor argument form, kcalloc(). This
patch replaces cases of:
kzalloc(a * b, gfp)
with:
kcalloc(a * b, gfp)
as well as handling cases of:
kzalloc(a * b * c, gfp)
with:
kzalloc(array3_size(a, b, c), gfp)
as it's slightly less ugly than:
kzalloc_array(array_size(a, b), c, gfp)
This does, however, attempt to ignore constant size factors like:
kzalloc(4 * 1024, gfp)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
kzalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
kzalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
kzalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_ID)
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_ID
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_CONST)
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_CONST
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_ID)
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_ID
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_CONST)
+ COUNT_CONST, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_CONST
+ COUNT_CONST, sizeof(THING)
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
- kzalloc
+ kcalloc
(
- SIZE * COUNT
+ COUNT, SIZE
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
kzalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
kzalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
kzalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(
- (E1) * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * (E3)
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@
(
kzalloc(sizeof(THING) * C2, ...)
|
kzalloc(sizeof(TYPE) * C2, ...)
|
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(C1 * C2, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (E2)
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * E2
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (E2)
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * E2
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * E2
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * (E2)
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- E1 * E2
+ E1, E2
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-12 14:03:40 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-19 16:54:47 +08:00
|
|
|
|
treewide: kzalloc() -> kcalloc()
The kzalloc() function has a 2-factor argument form, kcalloc(). This
patch replaces cases of:
kzalloc(a * b, gfp)
with:
kcalloc(a * b, gfp)
as well as handling cases of:
kzalloc(a * b * c, gfp)
with:
kzalloc(array3_size(a, b, c), gfp)
as it's slightly less ugly than:
kzalloc_array(array_size(a, b), c, gfp)
This does, however, attempt to ignore constant size factors like:
kzalloc(4 * 1024, gfp)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
kzalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
kzalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
kzalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_ID)
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_ID
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_CONST)
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_CONST
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_ID)
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_ID
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_CONST)
+ COUNT_CONST, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_CONST
+ COUNT_CONST, sizeof(THING)
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
- kzalloc
+ kcalloc
(
- SIZE * COUNT
+ COUNT, SIZE
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
kzalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
kzalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
kzalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(
- (E1) * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * (E3)
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@
(
kzalloc(sizeof(THING) * C2, ...)
|
kzalloc(sizeof(TYPE) * C2, ...)
|
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(C1 * C2, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (E2)
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * E2
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (E2)
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * E2
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * E2
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * (E2)
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- E1 * E2
+ E1, E2
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-12 14:03:40 -07:00
|
|
|
|
2017-03-06 20:31:21 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
|
|
|
|
|
virtio_net: Fix "‘%d’ directive writing between 1 and 11 bytes into a region of size 10" warnings
Fix the warnings when building virtio_net driver.
"
drivers/net/virtio_net.c: In function ‘init_vqs’:
drivers/net/virtio_net.c:4551:48: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 10 [-Wformat-overflow=]
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~
In function ‘virtnet_find_vqs’,
inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
drivers/net/virtio_net.c:4551:41: note: directive argument in the range [-2147483643, 65534]
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~~~~~~~~~
drivers/net/virtio_net.c:4551:17: note: ‘sprintf’ output between 8 and 18 bytes into a destination of size 16
4551 | sprintf(vi->rq[i].name, "input.%d", i);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/virtio_net.c: In function ‘init_vqs’:
drivers/net/virtio_net.c:4552:49: warning: ‘%d’ directive writing between 1 and 11 bytes into a region of size 9 [-Wformat-overflow=]
4552 | sprintf(vi->sq[i].name, "output.%d", i);
| ^~
In function ‘virtnet_find_vqs’,
inlined from ‘init_vqs’ at drivers/net/virtio_net.c:4645:8:
drivers/net/virtio_net.c:4552:41: note: directive argument in the range [-2147483643, 65534]
4552 | sprintf(vi->sq[i].name, "output.%d", i);
| ^~~~~~~~~~~
drivers/net/virtio_net.c:4552:17: note: ‘sprintf’ output between 9 and 19 bytes into a destination of size 16
4552 | sprintf(vi->sq[i].name, "output.%d", i);
"
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: Zhu Yanjun <yanjun.zhu@linux.dev>
Link: https://lore.kernel.org/r/20240104020902.2753599-1-yanjun.zhu@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-01-04 10:09:02 +08:00
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
|
|
|
|
|
2017-03-06 20:31:21 +02:00
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:14 +02:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-04-19 02:04:27 +00:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-05-31 07:16:32 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-06 20:31:21 +02:00
|
|
|
|
|
|
|
|
|
2024-07-08 09:48:08 +02:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-05-02 12:33:19 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
treewide: kzalloc() -> kcalloc()
The kzalloc() function has a 2-factor argument form, kcalloc(). This
patch replaces cases of:
kzalloc(a * b, gfp)
with:
kcalloc(a * b, gfp)
as well as handling cases of:
kzalloc(a * b * c, gfp)
with:
kzalloc(array3_size(a, b, c), gfp)
as it's slightly less ugly than:
kzalloc_array(array_size(a, b), c, gfp)
This does, however, attempt to ignore constant size factors like:
kzalloc(4 * 1024, gfp)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
kzalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
kzalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
kzalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_ID)
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_ID
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_CONST)
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_CONST
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_ID)
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_ID
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_CONST)
+ COUNT_CONST, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_CONST
+ COUNT_CONST, sizeof(THING)
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
- kzalloc
+ kcalloc
(
- SIZE * COUNT
+ COUNT, SIZE
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
kzalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
kzalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
kzalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(
- (E1) * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * (E3)
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@
(
kzalloc(sizeof(THING) * C2, ...)
|
kzalloc(sizeof(TYPE) * C2, ...)
|
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(C1 * C2, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (E2)
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * E2
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (E2)
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * E2
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * E2
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * (E2)
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- E1 * E2
+ E1, E2
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-12 14:03:40 -07:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
treewide: kzalloc() -> kcalloc()
The kzalloc() function has a 2-factor argument form, kcalloc(). This
patch replaces cases of:
kzalloc(a * b, gfp)
with:
kcalloc(a * b, gfp)
as well as handling cases of:
kzalloc(a * b * c, gfp)
with:
kzalloc(array3_size(a, b, c), gfp)
as it's slightly less ugly than:
kzalloc_array(array_size(a, b), c, gfp)
This does, however, attempt to ignore constant size factors like:
kzalloc(4 * 1024, gfp)
though any constants defined via macros get caught up in the conversion.
Any factors with a sizeof() of "unsigned char", "char", and "u8" were
dropped, since they're redundant.
The Coccinelle script used for this was:
// Fix redundant parens around sizeof().
@@
type TYPE;
expression THING, E;
@@
(
kzalloc(
- (sizeof(TYPE)) * E
+ sizeof(TYPE) * E
, ...)
|
kzalloc(
- (sizeof(THING)) * E
+ sizeof(THING) * E
, ...)
)
// Drop single-byte sizes and redundant parens.
@@
expression COUNT;
typedef u8;
typedef __u8;
@@
(
kzalloc(
- sizeof(u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * (COUNT)
+ COUNT
, ...)
|
kzalloc(
- sizeof(u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(__u8) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(char) * COUNT
+ COUNT
, ...)
|
kzalloc(
- sizeof(unsigned char) * COUNT
+ COUNT
, ...)
)
// 2-factor product with sizeof(type/expression) and identifier or constant.
@@
type TYPE;
expression THING;
identifier COUNT_ID;
constant COUNT_CONST;
@@
(
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_ID)
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_ID
+ COUNT_ID, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (COUNT_CONST)
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * COUNT_CONST
+ COUNT_CONST, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_ID)
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_ID
+ COUNT_ID, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (COUNT_CONST)
+ COUNT_CONST, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * COUNT_CONST
+ COUNT_CONST, sizeof(THING)
, ...)
)
// 2-factor product, only identifiers.
@@
identifier SIZE, COUNT;
@@
- kzalloc
+ kcalloc
(
- SIZE * COUNT
+ COUNT, SIZE
, ...)
// 3-factor product with 1 sizeof(type) or sizeof(expression), with
// redundant parens removed.
@@
expression THING;
identifier STRIDE, COUNT;
type TYPE;
@@
(
kzalloc(
- sizeof(TYPE) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(TYPE) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(TYPE))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * (COUNT) * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * (STRIDE)
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
|
kzalloc(
- sizeof(THING) * COUNT * STRIDE
+ array3_size(COUNT, STRIDE, sizeof(THING))
, ...)
)
// 3-factor product with 2 sizeof(variable), with redundant parens removed.
@@
expression THING1, THING2;
identifier COUNT;
type TYPE1, TYPE2;
@@
(
kzalloc(
- sizeof(TYPE1) * sizeof(TYPE2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(THING1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(THING1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * COUNT
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
|
kzalloc(
- sizeof(TYPE1) * sizeof(THING2) * (COUNT)
+ array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
, ...)
)
// 3-factor product, only identifiers, with redundant parens removed.
@@
identifier STRIDE, SIZE, COUNT;
@@
(
kzalloc(
- (COUNT) * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * STRIDE * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- (COUNT) * (STRIDE) * (SIZE)
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
|
kzalloc(
- COUNT * STRIDE * SIZE
+ array3_size(COUNT, STRIDE, SIZE)
, ...)
)
// Any remaining multi-factor products, first at least 3-factor products,
// when they're not all constants...
@@
expression E1, E2, E3;
constant C1, C2, C3;
@@
(
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(
- (E1) * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * E3
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- (E1) * (E2) * (E3)
+ array3_size(E1, E2, E3)
, ...)
|
kzalloc(
- E1 * E2 * E3
+ array3_size(E1, E2, E3)
, ...)
)
// And then all remaining 2 factors products when they're not all constants,
// keeping sizeof() as the second factor argument.
@@
expression THING, E1, E2;
type TYPE;
constant C1, C2, C3;
@@
(
kzalloc(sizeof(THING) * C2, ...)
|
kzalloc(sizeof(TYPE) * C2, ...)
|
kzalloc(C1 * C2 * C3, ...)
|
kzalloc(C1 * C2, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * (E2)
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(TYPE) * E2
+ E2, sizeof(TYPE)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * (E2)
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- sizeof(THING) * E2
+ E2, sizeof(THING)
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * E2
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- (E1) * (E2)
+ E1, E2
, ...)
|
- kzalloc
+ kcalloc
(
- E1 * E2
+ E1, E2
, ...)
)
Signed-off-by: Kees Cook <keescook@chromium.org>
2018-06-12 14:03:40 -07:00
|
|
|
|
2012-12-10 02:24:08 +00:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-05-06 10:07:50 -07:00
|
|
|
|
|
|
|
|
|
2022-05-04 09:37:25 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2015-08-19 09:48:40 +02:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:44 +03:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-04-19 08:30:48 +03:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
2021-08-03 16:16:04 +02:00
|
|
|
|
2013-01-24 23:51:30 +00:00
|
|
|
|
2021-08-03 16:16:04 +02:00
|
|
|
|
2013-01-24 23:51:29 +00:00
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
2017-08-18 13:46:24 -07:00
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
|
|
|
|
|
2015-08-19 09:48:40 +02:00
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-09 02:21:21 +02:00
|
|
|
|
2018-03-02 17:29:14 +08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-20 17:03:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
|
|
|
|
|
2022-07-18 12:11:02 +03:00
|
|
|
|
|
|
|
|
|
2023-07-31 10:06:56 +03:00
|
|
|
|
|
|
|
|
|
2014-11-20 17:03:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-10-20 13:55:21 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2015-01-12 16:23:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-11-20 17:03:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-01-27 21:44:59 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:10 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-12-07 13:35:58 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:10 +03:00
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-17 15:18:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
|
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2021-02-18 20:50:17 +00:00
|
|
|
|
|
|
|
|
|
2009-01-06 10:44:22 -08:00
|
|
|
|
virtio-net: support queue stat
To enhance functionality, we now support reporting statistics through
the netdev-generic netlink (netdev-genl) queue stats interface. However,
this does not extend to all statistics, so a new field, qstat_offset,
has been introduced. This field determines which statistics should be
reported via netdev-genl queue stats.
Given that queue stats are retrieved individually per queue, it's
necessary for the virtnet_get_hw_stats() function to be capable of
fetching statistics for a specific queue.
As the document https://docs.kernel.org/next/networking/statistics.html#notes-for-driver-authors
We should not duplicate the stats which get reported via the netlink API in
ethtool. If the stats are for queue stat, that will not be reported by
ethtool -S.
python3 ./tools/net/ynl/cli.py --spec Documentation/netlink/specs/netdev.yaml
--dump qstats-get --json '{"scope": "queue"}'
[{'ifindex': 2,
'queue-id': 0,
'queue-type': 'rx',
'rx-bytes': 157844011,
'rx-csum-bad': 0,
'rx-csum-none': 0,
'rx-csum-unnecessary': 2195386,
'rx-hw-drop-overruns': 0,
'rx-hw-drop-ratelimits': 0,
'rx-hw-drops': 12964,
'rx-packets': 598929},
{'ifindex': 2,
'queue-id': 0,
'queue-type': 'tx',
'tx-bytes': 1938511,
'tx-csum-none': 0,
'tx-hw-drop-errors': 0,
'tx-hw-drop-ratelimits': 0,
'tx-hw-drops': 0,
'tx-needs-csum': 61263,
'tx-packets': 15515}]
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:28 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2011-06-15 06:36:29 +00:00
|
|
|
|
2014-05-11 00:12:32 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2015-08-05 10:34:04 +08:00
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
2015-08-05 10:34:04 +08:00
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
|
|
|
|
|
2017-07-03 06:37:32 -07:00
|
|
|
|
2008-02-04 23:50:02 -05:00
|
|
|
|
|
|
|
|
|
2008-05-02 21:50:46 -05:00
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-12-07 13:35:58 +02:00
|
|
|
|
|
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
2014-12-24 11:03:52 +08:00
|
|
|
|
|
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
2017-07-03 06:37:32 -07:00
|
|
|
|
2011-03-31 01:01:35 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2024-06-17 21:15:23 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-20 17:14:54 -05:00
|
|
|
|
|
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2020-10-21 10:30:43 -04:00
|
|
|
|
2021-08-17 16:06:59 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2013-04-10 23:32:21 +00:00
|
|
|
|
2024-11-12 09:29:28 +08:00
|
|
|
|
|
|
|
|
|
2013-04-10 23:32:21 +00:00
|
|
|
|
2016-10-20 13:55:21 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2021-10-27 08:20:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-14 18:11:51 +10:30
|
|
|
|
|
|
|
|
|
2021-10-27 08:20:12 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-02-15 06:45:39 +00:00
|
|
|
|
2023-01-27 21:45:00 +01:00
|
|
|
|
|
|
|
|
|
2021-10-27 08:20:12 -07:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2008-02-18 10:02:51 +01:00
|
|
|
|
2013-10-07 15:51:58 -07:00
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
2022-07-25 15:21:59 +08:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2023-02-07 10:53:40 +01:00
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2023-02-07 10:53:40 +01:00
|
|
|
|
|
|
|
|
|
2008-11-16 22:41:34 -08:00
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: Do not send RSS key if it is not supported
There is a bug when setting the RSS options in virtio_net that can break
the whole machine, getting the kernel into an infinite loop.
Running the following command in any QEMU virtual machine with virtionet
will reproduce this problem:
# ethtool -X eth0 hfunc toeplitz
This is how the problem happens:
1) ethtool_set_rxfh() calls virtnet_set_rxfh()
2) virtnet_set_rxfh() calls virtnet_commit_rss_command()
3) virtnet_commit_rss_command() populates 4 entries for the rss
scatter-gather
4) Since the command above does not have a key, then the last
scatter-gatter entry will be zeroed, since rss_key_size == 0.
sg_buf_size = vi->rss_key_size;
5) This buffer is passed to qemu, but qemu is not happy with a buffer
with zero length, and do the following in virtqueue_map_desc() (QEMU
function):
if (!sz) {
virtio_error(vdev, "virtio: zero sized buffers are not allowed");
6) virtio_error() (also QEMU function) set the device as broken
vdev->broken = true;
7) Qemu bails out, and do not repond this crazy kernel.
8) The kernel is waiting for the response to come back (function
virtnet_send_command())
9) The kernel is waiting doing the following :
while (!virtqueue_get_buf(vi->cvq, &tmp) &&
!virtqueue_is_broken(vi->cvq))
cpu_relax();
10) None of the following functions above is true, thus, the kernel
loops here forever. Keeping in mind that virtqueue_is_broken() does
not look at the qemu `vdev->broken`, so, it never realizes that the
vitio is broken at QEMU side.
Fix it by not sending RSS commands if the feature is not available in
the device.
Fixes: c7114b1249fa ("drivers/net/virtio_net: Added basic RSS support.")
Cc: stable@vger.kernel.org
Cc: qemu-devel@nongnu.org
Signed-off-by: Breno Leitao <leitao@debian.org>
Reviewed-by: Heng Qi <hengqi@linux.alibaba.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2024-04-03 08:43:12 -07:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:04 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-17 15:18:22 +08:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-07-15 15:26:19 +03:00
|
|
|
|
|
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:42 +03:00
|
|
|
|
|
|
|
|
|
2016-06-03 16:57:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-10-25 16:12:12 -04:00
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-04-03 12:10:13 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-12-04 17:23:16 +03:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2016-10-25 16:12:12 -04:00
|
|
|
|
2017-03-08 02:14:25 +02:00
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
|
|
|
|
|
2016-06-03 16:57:12 -04:00
|
|
|
|
|
|
|
|
|
2022-09-14 17:49:11 +03:00
|
|
|
|
|
|
|
|
|
2014-10-24 16:55:57 +03:00
|
|
|
|
|
|
|
|
|
virtio-net: Set needed_headroom for virtio-net when VIRTIO_F_ANY_LAYOUT is true
This is a small supplement for commit e7428e95a06fb516fac1308bd0e176e27c0b9287
("virtio-net: put virtio-net header inline with data"). TCP packages have
enough room to put virtio-net header in, but UDP packages do not. By
setting dev->needed_headroom for virtio-net device, UDP packages could have
enough room.
For UDP packages, sk_buff is alloced in fun __ip_append_data. The size is
"alloclen + hh_len + 15", and "hh_len = LL_RESERVED_SPACE(rt-dst.dev);".
The Macro is defined as follows:
#define LL_RESERVED_SPACE(dev) \
((((dev)->hard_header_len+(dev)->needed_headroom)\
&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
By default, for UDP packages, after skb is allocated, only 16 bytes
reserved. And 2 bytes remained after mac header is set. That is not enough
to put virtio-net header in. If we set dev->needed_headroom to 12 or 10
(according to mergeable_rx_bufs is on or off ), more room can be reserved.
Then there is enough room for UDP packages to put the header in.
test result list as below:
guest and host: suse11sp3, netperf, intel 2.4GHz
+-------+---------+---------+---------+---------+
| | old | new |
+-------+---------+---------+---------+---------+
| UDP | Gbit/s | pps | Gbit/s | pps |
| 64 | 0.57 | 692232 | 0.61 | 742420 |
| 256 | 1.60 | 686860 | 1.71 | 733331 |
| 512 | 2.92 | 674576 | 3.07 | 710446 |
| 1024 | 4.99 | 598977 | 5.17 | 620821 |
| 1460 | 5.68 | 483757 | 7.16 | 610519 |
| 4096 | 6.98 | 637468 | 7.21 | 658471 |
+-------+---------+---------+---------+---------+
Signed-off-by: Zhang Jie <zhangjie14@huawei.com>
Acked-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: Jason Wang <jasowang@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-04-29 18:43:22 +08:00
|
|
|
|
2016-11-25 12:37:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:31 +05:30
|
|
|
|
2009-06-12 22:16:36 -06:00
|
|
|
|
2018-01-17 15:38:25 +09:00
|
|
|
|
2009-06-12 22:16:36 -06:00
|
|
|
|
2023-10-08 14:27:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-08 14:27:39 +08:00
|
|
|
|
|
|
|
|
|
2014-01-16 22:23:30 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-11-18 21:19:27 +08:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2022-08-16 01:36:27 -04:00
|
|
|
|
|
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
2018-05-31 02:05:07 +00:00
|
|
|
|
|
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
2018-05-31 02:05:07 +00:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
2022-03-28 20:53:35 +03:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2022-06-17 15:29:49 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2022-06-17 15:29:49 +08:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2008-02-04 23:50:02 -05:00
|
|
|
|
virtio-net: synchronize operstate with admin state on up/down
This patch synchronizes operstate with admin state per RFC2863.
This is done by trying to toggle the carrier upon open/close and
synchronize with the config change work. This allows to propagate
status correctly to stacked devices like:
ip link add link enp0s3 macvlan0 type macvlan
ip link set link enp0s3 down
ip link show
Before this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
......
5: macvlan0@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
After this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
...
5: macvlan0@enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
Cc: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Cc: Gia-Khanh Nguyen <gia-khanh.nguyen@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20240814052228.4654-4-jasowang@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-14 13:22:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-10-15 10:22:30 +10:30
|
|
|
|
|
|
|
|
|
2024-11-04 16:57:05 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:45 +03:00
|
|
|
|
2023-08-09 23:12:56 -04:00
|
|
|
|
2023-01-27 21:45:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-03 23:24:41 +03:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtio-net: synchronize operstate with admin state on up/down
This patch synchronizes operstate with admin state per RFC2863.
This is done by trying to toggle the carrier upon open/close and
synchronize with the config change work. This allows to propagate
status correctly to stacked devices like:
ip link add link enp0s3 macvlan0 type macvlan
ip link set link enp0s3 down
ip link show
Before this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
......
5: macvlan0@enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
After this patch:
3: enp0s3: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:05:00:00:09 brd ff:ff:ff:ff:ff:ff
...
5: macvlan0@enp0s3: <NO-CARRIER,BROADCAST,MULTICAST,UP,M-DOWN> mtu 1500 qdisc noqueue state LOWERLAYERDOWN mode DEFAULT group default qlen 1000
link/ether b2:a9:c5:04:da:53 brd ff:ff:ff:ff:ff:ff
Cc: Venkat Venkatsubra <venkat.x.venkatsubra@oracle.com>
Cc: Gia-Khanh Nguyen <gia-khanh.nguyen@oracle.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
Link: https://patch.msgid.link/20240814052228.4654-4-jasowang@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2024-08-14 13:22:27 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-08-14 13:22:28 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-06-17 15:29:49 +08:00
|
|
|
|
|
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
2013-01-24 23:51:31 +00:00
|
|
|
|
|
|
|
|
|
2016-05-31 11:52:43 +08:00
|
|
|
|
2013-01-24 23:51:31 +00:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2016-05-31 11:52:43 +08:00
|
|
|
|
2008-02-04 23:50:02 -05:00
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
2009-06-12 22:16:36 -06:00
|
|
|
|
virtio_net: Fix probe failed when modprobe virtio_net
When doing the following test steps, an error was found:
step 1: modprobe virtio_net succeeded
# modprobe virtio_net <-- OK
step 2: fault injection in register_netdevice()
# modprobe -r virtio_net <-- OK
# ...
FAULT_INJECTION: forcing a failure.
name failslab, interval 1, probability 0, space 0, times 0
CPU: 0 PID: 3521 Comm: modprobe
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996),
Call Trace:
<TASK>
...
should_failslab+0xa/0x20
...
dev_set_name+0xc0/0x100
netdev_register_kobject+0xc2/0x340
register_netdevice+0xbb9/0x1320
virtnet_probe+0x1d72/0x2658 [virtio_net]
...
</TASK>
virtio_net: probe of virtio0 failed with error -22
step 3: modprobe virtio_net failed
# modprobe virtio_net <-- failed
virtio_net: probe of virtio0 failed with error -2
The root cause of the problem is that the queues are not
disable on the error handling path when register_netdevice()
fails in virtnet_probe(), resulting in an error "-ENOENT"
returned in the next modprobe call in setup_vq().
virtio_pci_modern_device uses virtqueues to send or
receive message, and "queue_enable" records whether the
queues are available. In vp_modern_find_vqs(), all queues
will be selected and activated, but once queues are enabled
there is no way to go back except reset.
Fix it by reset virtio device on error handling path. This
makes error handling follow the same order as normal device
cleanup in virtnet_remove() which does: unregister, destroy
failover, then reset. And that flow is better tested than
error handling so we can be reasonably sure it works well.
Fixes: 024655555021 ("virtio_net: fix use after free on allocation failure")
Signed-off-by: Li Zetao <lizetao1@huawei.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Link: https://lore.kernel.org/r/20221122150046.3910638-1-lizetao1@huawei.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2022-11-22 23:00:46 +08:00
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
2012-12-07 07:04:55 +00:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:32 +05:30
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
virtio_net: correct netdev_tx_reset_queue() invocation point
When virtnet_close is followed by virtnet_open, some TX completions can
possibly remain unconsumed, until they are finally processed during the
first NAPI poll after the netdev_tx_reset_queue(), resulting in a crash
[1]. Commit b96ed2c97c79 ("virtio_net: move netdev_tx_reset_queue() call
before RX napi enable") was not sufficient to eliminate all BQL crash
cases for virtio-net.
This issue can be reproduced with the latest net-next master by running:
`while :; do ip l set DEV down; ip l set DEV up; done` under heavy network
TX load from inside the machine.
netdev_tx_reset_queue() can actually be dropped from virtnet_open path;
the device is not stopped in any case. For BQL core part, it's just like
traffic nearly ceases to exist for some period. For stall detector added
to BQL, even if virtnet_close could somehow lead to some TX completions
delayed for long, followed by virtnet_open, we can just take it as stall
as mentioned in commit 6025b9135f7a ("net: dqs: add NIC stall detector
based on BQL"). Note also that users can still reset stall_max via sysfs.
So, drop netdev_tx_reset_queue() from virtnet_enable_queue_pair(). This
eliminates the BQL crashes. As a result, netdev_tx_reset_queue() is now
explicitly required in freeze/restore path. This patch adds it to
immediately after free_unused_bufs(), following the rule of thumb:
netdev_tx_reset_queue() should follow any SKB freeing not followed by
netdev_tx_completed_queue(). This seems the most consistent and
streamlined approach, and now netdev_tx_reset_queue() runs whenever
free_unused_bufs() is done.
[1]:
------------[ cut here ]------------
kernel BUG at lib/dynamic_queue_limits.c:99!
Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
CPU: 7 UID: 0 PID: 1598 Comm: ip Tainted: G N 6.12.0net-next_main+ #2
Tainted: [N]=TEST
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), \
BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
RIP: 0010:dql_completed+0x26b/0x290
Code: b7 c2 49 89 e9 44 89 da 89 c6 4c 89 d7 e8 ed 17 47 00 58 65 ff 0d
4d 27 90 7e 0f 85 fd fe ff ff e8 ea 53 8d ff e9 f3 fe ff ff <0f> 0b 01
d2 44 89 d1 29 d1 ba 00 00 00 00 0f 48 ca e9 28 ff ff ff
RSP: 0018:ffffc900002b0d08 EFLAGS: 00010297
RAX: 0000000000000000 RBX: ffff888102398c80 RCX: 0000000080190009
RDX: 0000000000000000 RSI: 000000000000006a RDI: 0000000000000000
RBP: ffff888102398c00 R08: 0000000000000000 R09: 0000000000000000
R10: 00000000000000ca R11: 0000000000015681 R12: 0000000000000001
R13: ffffc900002b0d68 R14: ffff88811115e000 R15: ffff8881107aca40
FS: 00007f41ded69500(0000) GS:ffff888667dc0000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000556ccc2dc1a0 CR3: 0000000104fd8003 CR4: 0000000000772ef0
PKRU: 55555554
Call Trace:
<IRQ>
? die+0x32/0x80
? do_trap+0xd9/0x100
? dql_completed+0x26b/0x290
? dql_completed+0x26b/0x290
? do_error_trap+0x6d/0xb0
? dql_completed+0x26b/0x290
? exc_invalid_op+0x4c/0x60
? dql_completed+0x26b/0x290
? asm_exc_invalid_op+0x16/0x20
? dql_completed+0x26b/0x290
__free_old_xmit+0xff/0x170 [virtio_net]
free_old_xmit+0x54/0xc0 [virtio_net]
virtnet_poll+0xf4/0xe30 [virtio_net]
? __update_load_avg_cfs_rq+0x264/0x2d0
? update_curr+0x35/0x260
? reweight_entity+0x1be/0x260
__napi_poll.constprop.0+0x28/0x1c0
net_rx_action+0x329/0x420
? enqueue_hrtimer+0x35/0x90
? trace_hardirqs_on+0x1d/0x80
? kvm_sched_clock_read+0xd/0x20
? sched_clock+0xc/0x30
? kvm_sched_clock_read+0xd/0x20
? sched_clock+0xc/0x30
? sched_clock_cpu+0xd/0x1a0
handle_softirqs+0x138/0x3e0
do_softirq.part.0+0x89/0xc0
</IRQ>
<TASK>
__local_bh_enable_ip+0xa7/0xb0
virtnet_open+0xc8/0x310 [virtio_net]
__dev_open+0xfa/0x1b0
__dev_change_flags+0x1de/0x250
dev_change_flags+0x22/0x60
do_setlink.isra.0+0x2df/0x10b0
? rtnetlink_rcv_msg+0x34f/0x3f0
? netlink_rcv_skb+0x54/0x100
? netlink_unicast+0x23e/0x390
? netlink_sendmsg+0x21e/0x490
? ____sys_sendmsg+0x31b/0x350
? avc_has_perm_noaudit+0x67/0xf0
? cred_has_capability.isra.0+0x75/0x110
? __nla_validate_parse+0x5f/0xee0
? __pfx___probestub_irq_enable+0x3/0x10
? __create_object+0x5e/0x90
? security_capable+0x3b/0x70
rtnl_newlink+0x784/0xaf0
? avc_has_perm_noaudit+0x67/0xf0
? cred_has_capability.isra.0+0x75/0x110
? stack_depot_save_flags+0x24/0x6d0
? __pfx_rtnl_newlink+0x10/0x10
rtnetlink_rcv_msg+0x34f/0x3f0
? do_syscall_64+0x6c/0x180
? entry_SYSCALL_64_after_hwframe+0x76/0x7e
? __pfx_rtnetlink_rcv_msg+0x10/0x10
netlink_rcv_skb+0x54/0x100
netlink_unicast+0x23e/0x390
netlink_sendmsg+0x21e/0x490
____sys_sendmsg+0x31b/0x350
? copy_msghdr_from_user+0x6d/0xa0
___sys_sendmsg+0x86/0xd0
? __pte_offset_map+0x17/0x160
? preempt_count_add+0x69/0xa0
? __call_rcu_common.constprop.0+0x147/0x610
? preempt_count_add+0x69/0xa0
? preempt_count_add+0x69/0xa0
? _raw_spin_trylock+0x13/0x60
? trace_hardirqs_on+0x1d/0x80
__sys_sendmsg+0x66/0xc0
do_syscall_64+0x6c/0x180
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7f41defe5b34
Code: 15 e1 12 0f 00 f7 d8 64 89 02 b8 ff ff ff ff eb bf 0f 1f 44 00 00
f3 0f 1e fa 80 3d 35 95 0f 00 00 74 13 b8 2e 00 00 00 0f 05 <48> 3d 00
f0 ff ff 77 4c c3 0f 1f 00 55 48 89 e5 48 83 ec 20 89 55
RSP: 002b:00007ffe5336ecc8 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f41defe5b34
RDX: 0000000000000000 RSI: 00007ffe5336ed30 RDI: 0000000000000003
RBP: 00007ffe5336eda0 R08: 0000000000000010 R09: 0000000000000001
R10: 00007ffe5336f6f9 R11: 0000000000000202 R12: 0000000000000003
R13: 0000000067452259 R14: 0000556ccc28b040 R15: 0000000000000000
</TASK>
[...]
Fixes: c8bd1f7f3e61 ("virtio_net: add support for Byte Queue Limits")
Cc: <stable@vger.kernel.org> # v6.11+
Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
[ pabeni: trimmed possibly troublesome separator ]
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-12-06 10:10:42 +09:00
|
|
|
|
|
|
|
|
|
2021-10-13 06:55:44 -04:00
|
|
|
|
2010-02-08 14:14:42 +00:00
|
|
|
|
|
|
|
|
|
2010-01-29 03:20:04 +00:00
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
virtio_net: correct netdev_tx_reset_queue() invocation point
When virtnet_close is followed by virtnet_open, some TX completions can
possibly remain unconsumed, until they are finally processed during the
first NAPI poll after the netdev_tx_reset_queue(), resulting in a crash
[1]. Commit b96ed2c97c79 ("virtio_net: move netdev_tx_reset_queue() call
before RX napi enable") was not sufficient to eliminate all BQL crash
cases for virtio-net.
This issue can be reproduced with the latest net-next master by running:
`while :; do ip l set DEV down; ip l set DEV up; done` under heavy network
TX load from inside the machine.
netdev_tx_reset_queue() can actually be dropped from virtnet_open path;
the device is not stopped in any case. For BQL core part, it's just like
traffic nearly ceases to exist for some period. For stall detector added
to BQL, even if virtnet_close could somehow lead to some TX completions
delayed for long, followed by virtnet_open, we can just take it as stall
as mentioned in commit 6025b9135f7a ("net: dqs: add NIC stall detector
based on BQL"). Note also that users can still reset stall_max via sysfs.
So, drop netdev_tx_reset_queue() from virtnet_enable_queue_pair(). This
eliminates the BQL crashes. As a result, netdev_tx_reset_queue() is now
explicitly required in freeze/restore path. This patch adds it to
immediately after free_unused_bufs(), following the rule of thumb:
netdev_tx_reset_queue() should follow any SKB freeing not followed by
netdev_tx_completed_queue(). This seems the most consistent and
streamlined approach, and now netdev_tx_reset_queue() runs whenever
free_unused_bufs() is done.
[1]:
------------[ cut here ]------------
kernel BUG at lib/dynamic_queue_limits.c:99!
Oops: invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
CPU: 7 UID: 0 PID: 1598 Comm: ip Tainted: G N 6.12.0net-next_main+ #2
Tainted: [N]=TEST
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), \
BIOS rel-1.16.3-0-ga6ed6b701f0a-prebuilt.qemu.org 04/01/2014
RIP: 0010:dql_completed+0x26b/0x290
Code: b7 c2 49 89 e9 44 89 da 89 c6 4c 89 d7 e8 ed 17 47 00 58 65 ff 0d
4d 27 90 7e 0f 85 fd fe ff ff e8 ea 53 8d ff e9 f3 fe ff ff <0f> 0b 01
d2 44 89 d1 29 d1 ba 00 00 00 00 0f 48 ca e9 28 ff ff ff
RSP: 0018:ffffc900002b0d08 EFLAGS: 00010297
RAX: 0000000000000000 RBX: ffff888102398c80 RCX: 0000000080190009
RDX: 0000000000000000 RSI: 000000000000006a RDI: 0000000000000000
RBP: ffff888102398c00 R08: 0000000000000000 R09: 0000000000000000
R10: 00000000000000ca R11: 0000000000015681 R12: 0000000000000001
R13: ffffc900002b0d68 R14: ffff88811115e000 R15: ffff8881107aca40
FS: 00007f41ded69500(0000) GS:ffff888667dc0000(0000)
knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000556ccc2dc1a0 CR3: 0000000104fd8003 CR4: 0000000000772ef0
PKRU: 55555554
Call Trace:
<IRQ>
? die+0x32/0x80
? do_trap+0xd9/0x100
? dql_completed+0x26b/0x290
? dql_completed+0x26b/0x290
? do_error_trap+0x6d/0xb0
? dql_completed+0x26b/0x290
? exc_invalid_op+0x4c/0x60
? dql_completed+0x26b/0x290
? asm_exc_invalid_op+0x16/0x20
? dql_completed+0x26b/0x290
__free_old_xmit+0xff/0x170 [virtio_net]
free_old_xmit+0x54/0xc0 [virtio_net]
virtnet_poll+0xf4/0xe30 [virtio_net]
? __update_load_avg_cfs_rq+0x264/0x2d0
? update_curr+0x35/0x260
? reweight_entity+0x1be/0x260
__napi_poll.constprop.0+0x28/0x1c0
net_rx_action+0x329/0x420
? enqueue_hrtimer+0x35/0x90
? trace_hardirqs_on+0x1d/0x80
? kvm_sched_clock_read+0xd/0x20
? sched_clock+0xc/0x30
? kvm_sched_clock_read+0xd/0x20
? sched_clock+0xc/0x30
? sched_clock_cpu+0xd/0x1a0
handle_softirqs+0x138/0x3e0
do_softirq.part.0+0x89/0xc0
</IRQ>
<TASK>
__local_bh_enable_ip+0xa7/0xb0
virtnet_open+0xc8/0x310 [virtio_net]
__dev_open+0xfa/0x1b0
__dev_change_flags+0x1de/0x250
dev_change_flags+0x22/0x60
do_setlink.isra.0+0x2df/0x10b0
? rtnetlink_rcv_msg+0x34f/0x3f0
? netlink_rcv_skb+0x54/0x100
? netlink_unicast+0x23e/0x390
? netlink_sendmsg+0x21e/0x490
? ____sys_sendmsg+0x31b/0x350
? avc_has_perm_noaudit+0x67/0xf0
? cred_has_capability.isra.0+0x75/0x110
? __nla_validate_parse+0x5f/0xee0
? __pfx___probestub_irq_enable+0x3/0x10
? __create_object+0x5e/0x90
? security_capable+0x3b/0x70
rtnl_newlink+0x784/0xaf0
? avc_has_perm_noaudit+0x67/0xf0
? cred_has_capability.isra.0+0x75/0x110
? stack_depot_save_flags+0x24/0x6d0
? __pfx_rtnl_newlink+0x10/0x10
rtnetlink_rcv_msg+0x34f/0x3f0
? do_syscall_64+0x6c/0x180
? entry_SYSCALL_64_after_hwframe+0x76/0x7e
? __pfx_rtnetlink_rcv_msg+0x10/0x10
netlink_rcv_skb+0x54/0x100
netlink_unicast+0x23e/0x390
netlink_sendmsg+0x21e/0x490
____sys_sendmsg+0x31b/0x350
? copy_msghdr_from_user+0x6d/0xa0
___sys_sendmsg+0x86/0xd0
? __pte_offset_map+0x17/0x160
? preempt_count_add+0x69/0xa0
? __call_rcu_common.constprop.0+0x147/0x610
? preempt_count_add+0x69/0xa0
? preempt_count_add+0x69/0xa0
? _raw_spin_trylock+0x13/0x60
? trace_hardirqs_on+0x1d/0x80
__sys_sendmsg+0x66/0xc0
do_syscall_64+0x6c/0x180
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7f41defe5b34
Code: 15 e1 12 0f 00 f7 d8 64 89 02 b8 ff ff ff ff eb bf 0f 1f 44 00 00
f3 0f 1e fa 80 3d 35 95 0f 00 00 74 13 b8 2e 00 00 00 0f 05 <48> 3d 00
f0 ff ff 77 4c c3 0f 1f 00 55 48 89 e5 48 83 ec 20 89 55
RSP: 002b:00007ffe5336ecc8 EFLAGS: 00000202 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f41defe5b34
RDX: 0000000000000000 RSI: 00007ffe5336ed30 RDI: 0000000000000003
RBP: 00007ffe5336eda0 R08: 0000000000000010 R09: 0000000000000001
R10: 00007ffe5336f6f9 R11: 0000000000000202 R12: 0000000000000003
R13: 0000000067452259 R14: 0000556ccc28b040 R15: 0000000000000000
</TASK>
[...]
Fixes: c8bd1f7f3e61 ("virtio_net: add support for Byte Queue Limits")
Cc: <stable@vger.kernel.org> # v6.11+
Signed-off-by: Koichiro Den <koichiro.den@canonical.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Reviewed-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
[ pabeni: trimmed possibly troublesome separator ]
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-12-06 10:10:42 +09:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2009-06-12 22:16:36 -06:00
|
|
|
|
2014-01-16 22:23:26 -08:00
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
2011-12-22 16:58:32 +05:30
|
|
|
|
|
|
|
|
|
2012-12-03 09:24:15 -05:00
|
|
|
|
2011-12-22 16:58:32 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
2013-01-24 23:51:31 +00:00
|
|
|
|
2014-10-15 10:22:29 +10:30
|
|
|
|
|
|
|
|
|
2023-07-20 04:38:38 -04:00
|
|
|
|
|
|
|
|
|
2012-04-11 20:43:52 +00:00
|
|
|
|
2024-06-21 18:13:53 +08:00
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:32 +05:30
|
|
|
|
|
|
|
|
|
2018-05-24 09:55:17 -07:00
|
|
|
|
|
|
|
|
|
2011-12-22 16:58:32 +05:30
|
|
|
|
2008-07-25 12:06:01 -05:00
|
|
|
|
2024-11-04 16:57:03 +08:00
|
|
|
|
|
|
|
|
|
2007-11-19 11:20:42 -05:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2017-07-25 17:35:50 +02:00
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-25 17:35:50 +02:00
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
|
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
2017-02-02 19:16:01 -08:00
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
|
|
|
|
|
2012-12-07 07:04:56 +00:00
|
|
|
|
|
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
2021-05-17 16:45:16 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-10-29 15:11:07 +08:00
|
|
|
|
2021-05-17 16:45:16 +08:00
|
|
|
|
2013-10-29 15:11:07 +08:00
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-11-04 12:55:36 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-12-07 13:35:58 +02:00
|
|
|
|
2016-11-04 12:55:36 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-01-05 17:44:54 -05:00
|
|
|
|
2022-03-28 20:53:34 +03:00
|
|
|
|
2023-03-09 10:45:59 +01:00
|
|
|
|
2023-07-31 10:06:56 +03:00
|
|
|
|
virtio_net: support device stats
As the spec https://github.com/oasis-tcs/virtio-spec/commit/42f389989823039724f95bbbd243291ab0064f82
make virtio-net support getting the stats from the device by ethtool -S
<eth0>.
NIC statistics:
rx0_packets: 582951
rx0_bytes: 155307077
rx0_drops: 0
rx0_xdp_packets: 0
rx0_xdp_tx: 0
rx0_xdp_redirects: 0
rx0_xdp_drops: 0
rx0_kicks: 17007
rx0_hw_packets: 2179409
rx0_hw_bytes: 510015040
rx0_hw_notifications: 0
rx0_hw_interrupts: 0
rx0_hw_needs_csum: 2179409
rx0_hw_ratelimit_bytes: 0
tx0_packets: 15361
tx0_bytes: 1918970
tx0_xdp_tx: 0
tx0_xdp_tx_drops: 0
tx0_kicks: 15361
tx0_timeouts: 0
tx0_hw_packets: 32272
tx0_hw_bytes: 4311698
tx0_hw_notifications: 0
tx0_hw_interrupts: 0
tx0_hw_ratelimit_bytes: 0
The follow stats are hidden, there are exported by the queue stat API
in the subsequent comment.
VIRTNET_STATS_DESC_RX(basic, drops)
VIRTNET_STATS_DESC_RX(basic, drop_overruns),
VIRTNET_STATS_DESC_TX(basic, drops),
VIRTNET_STATS_DESC_TX(basic, drop_malformed),
VIRTNET_STATS_DESC_RX(csum, csum_valid),
VIRTNET_STATS_DESC_RX(csum, csum_none),
VIRTNET_STATS_DESC_RX(csum, csum_bad),
VIRTNET_STATS_DESC_TX(csum, needs_csum),
VIRTNET_STATS_DESC_TX(csum, csum_none),
VIRTNET_STATS_DESC_RX(gso, gso_packets),
VIRTNET_STATS_DESC_RX(gso, gso_bytes),
VIRTNET_STATS_DESC_RX(gso, gso_packets_coalesced),
VIRTNET_STATS_DESC_RX(gso, gso_bytes_coalesced),
VIRTNET_STATS_DESC_TX(gso, gso_packets),
VIRTNET_STATS_DESC_TX(gso, gso_bytes),
VIRTNET_STATS_DESC_TX(gso, gso_segments),
VIRTNET_STATS_DESC_TX(gso, gso_segments_bytes),
VIRTNET_STATS_DESC_RX(speed, ratelimit_packets),
VIRTNET_STATS_DESC_TX(speed, ratelimit_packets),
Signed-off-by: Xuan Zhuo <xuanzhuo@linux.alibaba.com>
Acked-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
2024-04-26 11:39:24 +08:00
|
|
|
|
2016-11-04 12:55:36 +02:00
|
|
|
|
2008-05-02 21:50:50 -05:00
|
|
|
|
2016-11-04 12:55:36 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2013-07-25 10:20:23 +09:30
|
|
|
|
2008-05-02 21:50:50 -05:00
|
|
|
|
|
|
|
|
|
2009-11-05 01:32:44 -08:00
|
|
|
|
2008-05-02 21:50:50 -05:00
|
|
|
|
|
|
|
|
|
2016-11-04 12:55:36 +02:00
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2017-03-29 19:09:14 +03:00
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
2012-12-03 09:24:15 -05:00
|
|
|
|
2009-01-19 17:09:49 -08:00
|
|
|
|
2013-09-17 09:25:23 +09:30
|
|
|
|
2011-12-22 16:58:33 +05:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-21 20:19:54 +01:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2016-12-21 20:19:54 +01:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2022-02-13 02:01:41 -06:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-07-24 15:38:32 +02:00
|
|
|
|
2016-08-12 19:49:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2007-10-22 11:03:37 +10:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|