Re: [PATCH] ltq-vdsl/ltq-adsl: fix elapsed time calculation

2022-04-29 Thread Martin Blumenstingl via openwrt-devel
The sender domain has a DMARC Reject/Quarantine policy which disallows
sending mailing list messages using the original "From" header.

To mitigate this problem, the original message has been wrapped
automatically by the mailing list software.--- Begin Message ---
On Mon, Apr 25, 2022 at 9:55 PM Jan Hoffmann  wrote:
>
> The driver maintains elapsed times by repeatedly accumulating the time
> since the previous update in a loop. For the elapsed showtime time, the
> time difference is truncated to seconds before adding it, leading to a
> sizable error over time.
>
> Move the truncation to before calculation of the time difference in
> order to remove this error. Also maintain the total elapsed time in the
> same way in full seconds, to prevent the unsigned 32-bit counter from
> wrapping around after about 50 days.
>
> Testing on a VR9 device shows that the reported line uptime now matches
> the actual elapsed wall time. The ADSL variant is only compile-tested,
> but it should also work as the relevant code is identical.
>
> Signed-off-by: Jan Hoffmann 
Tested-by: Martin Blumenstingl 

statistics seem fine to me with this, although I didn't test for 50+ days ;-)


Best regards,
Martin

--- End Message ---
___
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


[PATCH] ltq-vdsl/ltq-adsl: fix elapsed time calculation

2022-04-25 Thread Jan Hoffmann
The driver maintains elapsed times by repeatedly accumulating the time
since the previous update in a loop. For the elapsed showtime time, the
time difference is truncated to seconds before adding it, leading to a
sizable error over time.

Move the truncation to before calculation of the time difference in
order to remove this error. Also maintain the total elapsed time in the
same way in full seconds, to prevent the unsigned 32-bit counter from
wrapping around after about 50 days.

Testing on a VR9 device shows that the reported line uptime now matches
the actual elapsed wall time. The ADSL variant is only compile-tested,
but it should also work as the relevant code is identical.

Signed-off-by: Jan Hoffmann 
---
 package/kernel/lantiq/ltq-adsl/Makefile   |   2 +-
 .../patches/200-fix-elapsed-time.patch| 122 ++
 package/kernel/lantiq/ltq-vdsl/Makefile   |   2 +-
 .../patches/200-fix-elapsed-time.patch| 122 ++
 4 files changed, 246 insertions(+), 2 deletions(-)
 create mode 100644 
package/kernel/lantiq/ltq-adsl/patches/200-fix-elapsed-time.patch
 create mode 100644 
package/kernel/lantiq/ltq-vdsl/patches/200-fix-elapsed-time.patch

diff --git a/package/kernel/lantiq/ltq-adsl/Makefile 
b/package/kernel/lantiq/ltq-adsl/Makefile
index 31874acaca4e..ac9667493386 100644
--- a/package/kernel/lantiq/ltq-adsl/Makefile
+++ b/package/kernel/lantiq/ltq-adsl/Makefile
@@ -10,7 +10,7 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=ltq-adsl
 PKG_VERSION:=3.24.4.4
-PKG_RELEASE:=3
+PKG_RELEASE:=4
 PKG_SOURCE:=drv_dsl_cpe_api_danube-$(PKG_VERSION).tar.gz
 
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/ltq-dsl-$(BUILD_VARIANT)/drv_dsl_cpe_api-$(PKG_VERSION)
 PKG_SOURCE_URL:=@OPENWRT
diff --git a/package/kernel/lantiq/ltq-adsl/patches/200-fix-elapsed-time.patch 
b/package/kernel/lantiq/ltq-adsl/patches/200-fix-elapsed-time.patch
new file mode 100644
index ..42ec21437155
--- /dev/null
+++ b/package/kernel/lantiq/ltq-adsl/patches/200-fix-elapsed-time.patch
@@ -0,0 +1,122 @@
+--- a/src/include/drv_dsl_cpe_pm_core.h
 b/src/include/drv_dsl_cpe_pm_core.h
+@@ -1525,9 +1525,9 @@ typedef struct
+DSL_boolean_t bShowtimeProcessingStart;
+/** Showtime reached flag*/
+DSL_boolean_t bShowtimeInvTrigger;
+-   /** Current Showtime synchronization time to be used, (msec) */
++   /** Current Showtime synchronization time to be used, (sec) */
+DSL_uint32_t nCurrShowtimeTime;
+-   /** Showtime synchronization time to be used, (msec) */
++   /** Showtime synchronization time to be used, (sec) */
+DSL_uint32_t nElapsedShowtimeTime;
+/** Actual Line state*/
+DSL_LineStateValue_t nLineState;
+--- a/src/pm/drv_dsl_cpe_api_pm.c
 b/src/pm/drv_dsl_cpe_api_pm.c
+@@ -1445,7 +1445,7 @@ DSL_Error_t DSL_DRV_PM_ChannelCountersTo
+}
+ 
+/* Fill Total Counters elapsed time*/
+-   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime/DSL_PM_MSEC;
++   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime;
+ 
+pChCounters = 
DSL_DRV_PM_PTR_CHANNEL_COUNTERS_TOTAL(pCounters->nChannel,pCounters->nDirection);
+ 
+@@ -1501,7 +1501,7 @@ DSL_Error_t DSL_DRV_PM_ChannelCountersEx
+}
+ 
+/* Fill Total Counters elapsed time*/
+-   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime/DSL_PM_MSEC;
++   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime;
+ 
+pChCounters = 
DSL_DRV_PM_PTR_CHANNEL_COUNTERS_TOTAL_EXT(pCounters->nChannel);
+ 
+@@ -2418,7 +2418,7 @@ DSL_Error_t DSL_DRV_PM_DataPathCountersT
+}
+ 
+/* Fill Total Counters elapsed time*/
+-   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime/DSL_PM_MSEC;
++   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime;
+ 
+pDpCounters = 
DSL_DRV_PM_PTR_DATAPATH_COUNTERS_TOTAL(pCounters->nChannel,pCounters->nDirection);
+ 
+@@ -3190,7 +3190,7 @@ DSL_Error_t DSL_DRV_PM_DataPathFailureCo
+}
+ 
+/* Fill Total Counters elapsed time*/
+-   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime/DSL_PM_MSEC;
++   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime;
+ 
+pDpCounters = 
DSL_DRV_PM_PTR_DATAPATH_FAILURE_COUNTERS_TOTAL(pCounters->nChannel,pCounters->nDirection);
+ 
+@@ -3950,7 +3950,7 @@ DSL_Error_t DSL_DRV_PM_LineSecCountersTo
+}
+ 
+/* Fill Total Counters elapsed time*/
+-   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime/DSL_PM_MSEC;
++   pCounters->total.nElapsedTime = 
DSL_DRV_PM_CONTEXT(pContext)->nPmTotalElapsedTime;
+ 
+pLineCounters = 
DSL_DRV_PM_PTR_LINE_SEC_COUNTERS_TOTAL(pCounters->nDirection);
+ 
+@@ -4602,7 +4602,7 @@ DSL_Error_t DSL_DRV_PM_LineInitCountersT
+}
+ 
+/* Fill Total Counters elapsed time*/
+-   pCounters->total.nElapsedTime =