aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/lantiq/ltq-adsl/patches/202-g997_danube-dynamically-allocate-hlogdata.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/lantiq/ltq-adsl/patches/202-g997_danube-dynamically-allocate-hlogdata.patch')
-rw-r--r--package/kernel/lantiq/ltq-adsl/patches/202-g997_danube-dynamically-allocate-hlogdata.patch65
1 files changed, 65 insertions, 0 deletions
diff --git a/package/kernel/lantiq/ltq-adsl/patches/202-g997_danube-dynamically-allocate-hlogdata.patch b/package/kernel/lantiq/ltq-adsl/patches/202-g997_danube-dynamically-allocate-hlogdata.patch
new file mode 100644
index 0000000000..c3b1047a2a
--- /dev/null
+++ b/package/kernel/lantiq/ltq-adsl/patches/202-g997_danube-dynamically-allocate-hlogdata.patch
@@ -0,0 +1,65 @@
+--- a/src/g997/drv_dsl_cpe_api_g997_danube.c
++++ b/src/g997/drv_dsl_cpe_api_g997_danube.c
+@@ -1984,41 +1984,53 @@ DSL_Error_t DSL_DRV_DEV_G997_DeltHlogGet(
+ {
+ if (nDirection == DSL_DOWNSTREAM)
+ {
+- DSL_G997_DeltHlogData_t HlogData;
++ DSL_G997_DeltHlogData_t *HlogData;
+
+- memset(&HlogData, 0x0, sizeof(DSL_G997_DeltHlogData_t));
++ HlogData = kzalloc(sizeof(*HlogData), GFP_KERNEL);
++ if (!HlogData)
++ {
++ DSL_DEBUG(DSL_DBG_ERR,
++ (pContext, "DSL[%02d]: ERROR - Alloc HlogData failed!"DSL_DRV_CRLF,
++ DSL_DEV_NUM(pContext)));
++ return DSL_ERR_MEMORY;
++ }
++
++ memset(HlogData, 0x0, sizeof(DSL_G997_DeltHlogData_t));
+
+ /* Get SHOWTIME Hlog values*/
+ nErrCode = DSL_DRV_DANUBE_G997_DeltHlogGet(
+- pContext, nDirection, &HlogData);
++ pContext, nDirection, HlogData);
+ if (nErrCode != DSL_SUCCESS)
+ {
+ DSL_DEBUG(DSL_DBG_ERR,
+ (pContext, "DSL[%02d]: ERROR - Showtime Hlog get failed!"DSL_DRV_CRLF,
+ DSL_DEV_NUM(pContext)));
++ kfree(HlogData);
+ return nErrCode;
+ }
+
+ /* if actual group size != 1, values should be spread */
+- if (HlogData.nGroupSize != 1)
++ if (HlogData->nGroupSize != 1)
+ {
+ nErrCode = DSL_DRV_DANUBE_G997_DeltValuesSpread(
+- 0x1, HlogData.nGroupSize, HlogData.deltHlog.nNumData,
+- HlogData.deltHlog.nNSCData, pData->deltHlog.nNSCData);
++ 0x1, HlogData->nGroupSize, HlogData->deltHlog.nNumData,
++ HlogData->deltHlog.nNSCData, pData->deltHlog.nNSCData);
+
+ if (nErrCode == DSL_SUCCESS)
+ {
+ pData->deltHlog.nNumData =
+- (DSL_uint16_t)(HlogData.deltHlog.nNumData * HlogData.nGroupSize);
++ (DSL_uint16_t)(HlogData->deltHlog.nNumData * HlogData->nGroupSize);
+ pData->nGroupSize = 1;
+- pData->nMeasurementTime = HlogData.nMeasurementTime;
++ pData->nMeasurementTime = HlogData->nMeasurementTime;
+ }
+ }
+ else
+ {
+ /* No spread needed, copy data*/
+- memcpy(pData, &HlogData, sizeof(DSL_G997_DeltHlogData_t));
++ memcpy(pData, HlogData, sizeof(DSL_G997_DeltHlogData_t));
+ }
++
++ kfree(HlogData);
+ }
+ else
+ {