realtek: mark clock source as continuous
authorSander Vanheule <sander@svanheule.net>
Mon, 31 Oct 2022 09:11:04 +0000 (10:11 +0100)
committerSander Vanheule <sander@svanheule.net>
Tue, 1 Nov 2022 08:13:11 +0000 (09:13 +0100)
After replacing the R4K event timer and clock source with the new
Realtek Otto timer, performance for RTL839x devices was severely
impacted, as reported by Hiroshi.

Research by Markus showed that after commit 4657a5301eb5 ("realtek:
avoid busy waiting for RTL839x PHY read/write"), the ethernet driver
could only update a phy once per timer interval, which also heavily
impacted boot time. On e.g. a Zyxel GS1900-48, this added around a
minute to the time to fully initialise the switch.

By marking the otto clocksource as continuous, the kernel enables it to
be used for high resolution timers. This allows readx_poll_timeout() to
sleep for less than one system timer interval, reducing system dead
time.

Link: https://github.com/openwrt/openwrt/issues/11117
Reported-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Cc: Markus Stockhausen <markus.stockhausen@gmx.de>
Signed-off-by: Sander Vanheule <sander@svanheule.net>
Tested-by: INAGAKI Hiroshi <musashino.open@gmail.com> # Panasonic Switch-M48eG PN28480K
Tested-by: Jan Hoffmann <jan@3e8.eu> # HPE 1920-8G, HPE 1920-48G
target/linux/realtek/files-5.10/drivers/clocksource/timer-rtl-otto.c

index 12eed78653d016cbeff62b29c43f5c8cad32e853..14e28e50f40eb4e2c81ed54ab894ddc633657dde 100644 (file)
@@ -227,6 +227,7 @@ struct rttm_cs rttm_cs = {
                .name   = "realtek_otto_timer",
                .rating = 400,
                .mask   = CLOCKSOURCE_MASK(RTTM_BIT_COUNT),
+               .flags  = CLOCK_SOURCE_IS_CONTINUOUS,
                .read   = rttm_read_clocksource,
                .enable = rttm_enable_clocksource
        }