net/core/dev.c: enable timestamp static key if CPU isolation is configured
Subsystems (2)
PATCH 1/1 net/core/dev.c: enable timestamp static key if CPU isolation is configured
For systems that use CPU isolation (via nohz_full), creating or destroying a socket with timestamping (SOF_TIMESTAMPING_OPT_TX_SWHW) might cause a static key to be enabled/disabled. This in turn causes undesired IPIs to isolated CPUs.
So enable the static key unconditionally, if CPU isolation is enabled, thus avoiding the IPIs.
net/core/dev.c +12 -0
@@ -155,6 +155,7 @@#include <net/netdev_rx_queue.h> #include <net/page_pool/types.h> #include <net/page_pool/helpers.h> +#include <linux/sched/isolation.h> #include "dev.h" #include "net-sysfs.h"
@@ -11851,3 +11852,14 @@ static int __init net_dev_init(void) }subsys_initcall (net_dev_init); + +static int __init net_dev_late_init (void ) +{ +/* avoid static key IPIs to isolated CPUs */ +if (housekeeping_enabled (HK_TYPE_MISC )) +net_enable_timestamp (); + +return 0 ; +} + +late_initcall (net_dev_late_init);
Paolo Abeni
maintainerHi,
Quoted 4 lines · Marcelo Tosatti
For systems that use CPU isolation (via
nohz_full), creating or destroying a socket with timestamping (SOF_TIMESTAMPING_OPT_TX_SWHW) might cause a static key to be enabled/disabled. This in turn causes undesired IPIs to isolated CPUs.
I believe Willem is correct, the relevant flag isSOF_TIMESTAMPING_RX_SOFTWARE, see:
https://elixir.bootlin.com/linux/v6.8-rc5/source/net/core/sock.c#L938
the example you used is a sort of API misuse, placing flag where a bool is expected.
Please send a v2 with the updated commit message, you can mention both SO_TIMESTAMPING (SOF_TIMESTAMPING_RX_SOFTWARE) and SO_TIMESTAMP.
Please also include Willem in recipients list, since he gave feedback on previous version.
Thanks!
Paolo