Message ID | 1605629162-31876-6-git-send-email-min.li.xe@renesas.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | ptp_clockmatrix bug fix and improvement | expand |
Context | Check | Description |
---|---|---|
netdev/cover_letter | success | Link |
netdev/fixes_present | success | Link |
netdev/patch_count | success | Link |
netdev/tree_selection | success | Clearly marked for net-next |
netdev/subject_prefix | success | Link |
netdev/source_inline | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Link |
netdev/module_param | success | Was 0 now: 0 |
netdev/build_32bit | success | Errors and warnings before: 1 this patch: 1 |
netdev/kdoc | success | Errors and warnings before: 2 this patch: 2 |
netdev/verify_fixes | success | Link |
netdev/checkpatch | success | total: 0 errors, 0 warnings, 0 checks, 227 lines checked |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 1 this patch: 1 |
netdev/header_inline | success | Link |
netdev/stable | success | Stable not CCed |
Hi,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on net-next/master]
url: https://github.com/0day-ci/linux/commits/min-li-xe-renesas-com/ptp_clockmatrix-bug-fix-and-improvement/20201118-004135
base: https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 72308ecbf33b145641aba61071be31a85ebfd92c
config: sparc-allyesconfig (attached as .config)
compiler: sparc64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/0day-ci/linux/commit/2b6e446631ab9940f935bc0299d01cb323e35389
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review min-li-xe-renesas-com/ptp_clockmatrix-bug-fix-and-improvement/20201118-004135
git checkout 2b6e446631ab9940f935bc0299d01cb323e35389
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=sparc
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
In function 'idtcm_strverscmp',
inlined from 'idtcm_set_version_info' at drivers/ptp/ptp_clockmatrix.c:2113:6,
inlined from 'idtcm_probe' at drivers/ptp/ptp_clockmatrix.c:2372:2:
>> drivers/ptp/ptp_clockmatrix.c:147:2: warning: 'strncpy' output may be truncated copying 15 bytes from a string of length 15 [-Wstringop-truncation]
147 | strncpy(ver1, version1, 15);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
vim +/strncpy +147 drivers/ptp/ptp_clockmatrix.c
3a6ba7dc7799355 Vincent Cheng 2019-10-31 134
bdb09b91d9a2f66 Min Li 2020-11-17 135 static int idtcm_strverscmp(const char *version1, const char *version2)
7ea5fda2b1325e1 Min Li 2020-07-28 136 {
7ea5fda2b1325e1 Min Li 2020-07-28 137 u8 num1;
7ea5fda2b1325e1 Min Li 2020-07-28 138 u8 num2;
7ea5fda2b1325e1 Min Li 2020-07-28 139 int result = 0;
bdb09b91d9a2f66 Min Li 2020-11-17 140 char ver1[16];
bdb09b91d9a2f66 Min Li 2020-11-17 141 char ver2[16];
bdb09b91d9a2f66 Min Li 2020-11-17 142 char *cur1;
bdb09b91d9a2f66 Min Li 2020-11-17 143 char *cur2;
bdb09b91d9a2f66 Min Li 2020-11-17 144 char *next1;
bdb09b91d9a2f66 Min Li 2020-11-17 145 char *next2;
bdb09b91d9a2f66 Min Li 2020-11-17 146
bdb09b91d9a2f66 Min Li 2020-11-17 @147 strncpy(ver1, version1, 15);
bdb09b91d9a2f66 Min Li 2020-11-17 148 strncpy(ver2, version2, 15);
bdb09b91d9a2f66 Min Li 2020-11-17 149 cur1 = ver1;
bdb09b91d9a2f66 Min Li 2020-11-17 150 cur2 = ver2;
7ea5fda2b1325e1 Min Li 2020-07-28 151
7ea5fda2b1325e1 Min Li 2020-07-28 152 /* loop through each level of the version string */
7ea5fda2b1325e1 Min Li 2020-07-28 153 while (result == 0) {
bdb09b91d9a2f66 Min Li 2020-11-17 154 next1 = strchr(cur1, '.');
bdb09b91d9a2f66 Min Li 2020-11-17 155 next2 = strchr(cur2, '.');
bdb09b91d9a2f66 Min Li 2020-11-17 156
bdb09b91d9a2f66 Min Li 2020-11-17 157 /* kstrtou8 could fail for dot */
bdb09b91d9a2f66 Min Li 2020-11-17 158 if (next1) {
bdb09b91d9a2f66 Min Li 2020-11-17 159 *next1 = '\0';
bdb09b91d9a2f66 Min Li 2020-11-17 160 next1++;
bdb09b91d9a2f66 Min Li 2020-11-17 161 }
bdb09b91d9a2f66 Min Li 2020-11-17 162
bdb09b91d9a2f66 Min Li 2020-11-17 163 if (next2) {
bdb09b91d9a2f66 Min Li 2020-11-17 164 *next2 = '\0';
bdb09b91d9a2f66 Min Li 2020-11-17 165 next2++;
bdb09b91d9a2f66 Min Li 2020-11-17 166 }
bdb09b91d9a2f66 Min Li 2020-11-17 167
7ea5fda2b1325e1 Min Li 2020-07-28 168 /* extract leading version numbers */
bdb09b91d9a2f66 Min Li 2020-11-17 169 if (kstrtou8(cur1, 10, &num1) < 0)
7ea5fda2b1325e1 Min Li 2020-07-28 170 return -1;
7ea5fda2b1325e1 Min Li 2020-07-28 171
bdb09b91d9a2f66 Min Li 2020-11-17 172 if (kstrtou8(cur2, 10, &num2) < 0)
7ea5fda2b1325e1 Min Li 2020-07-28 173 return -1;
7ea5fda2b1325e1 Min Li 2020-07-28 174
7ea5fda2b1325e1 Min Li 2020-07-28 175 /* if numbers differ, then set the result */
bdb09b91d9a2f66 Min Li 2020-11-17 176 if (num1 < num2) {
7ea5fda2b1325e1 Min Li 2020-07-28 177 result = -1;
bdb09b91d9a2f66 Min Li 2020-11-17 178 } else if (num1 > num2) {
7ea5fda2b1325e1 Min Li 2020-07-28 179 result = 1;
bdb09b91d9a2f66 Min Li 2020-11-17 180 } else {
7ea5fda2b1325e1 Min Li 2020-07-28 181 /* if numbers are the same, go to next level */
bdb09b91d9a2f66 Min Li 2020-11-17 182 if (!next1 && !next2)
7ea5fda2b1325e1 Min Li 2020-07-28 183 break;
bdb09b91d9a2f66 Min Li 2020-11-17 184 else if (!next1) {
7ea5fda2b1325e1 Min Li 2020-07-28 185 result = -1;
bdb09b91d9a2f66 Min Li 2020-11-17 186 } else if (!next2) {
7ea5fda2b1325e1 Min Li 2020-07-28 187 result = 1;
bdb09b91d9a2f66 Min Li 2020-11-17 188 } else {
bdb09b91d9a2f66 Min Li 2020-11-17 189 cur1 = next1;
bdb09b91d9a2f66 Min Li 2020-11-17 190 cur2 = next2;
7ea5fda2b1325e1 Min Li 2020-07-28 191 }
7ea5fda2b1325e1 Min Li 2020-07-28 192 }
7ea5fda2b1325e1 Min Li 2020-07-28 193 }
bdb09b91d9a2f66 Min Li 2020-11-17 194
7ea5fda2b1325e1 Min Li 2020-07-28 195 return result;
7ea5fda2b1325e1 Min Li 2020-07-28 196 }
7ea5fda2b1325e1 Min Li 2020-07-28 197
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
diff --git a/drivers/ptp/ptp_clockmatrix.c b/drivers/ptp/ptp_clockmatrix.c index b10c6b9..007d3e0 100644 --- a/drivers/ptp/ptp_clockmatrix.c +++ b/drivers/ptp/ptp_clockmatrix.c @@ -939,8 +939,8 @@ static void restore_output_phase_adj(struct idtcm_channel *channel) } } -static int _idtcm_settime(struct idtcm_channel *channel, - struct timespec64 const *ts) +static int _idtcm_settime_deprecated(struct idtcm_channel *channel, + struct timespec64 const *ts) { struct idtcm *idtcm = channel->idtcm; int retval; @@ -965,9 +965,9 @@ static int _idtcm_settime(struct idtcm_channel *channel, return retval; } -static int _idtcm_settime_v487(struct idtcm_channel *channel, - struct timespec64 const *ts, - enum scsr_tod_write_type_sel wr_type) +static int _idtcm_settime(struct idtcm_channel *channel, + struct timespec64 const *ts, + enum scsr_tod_write_type_sel wr_type) { return _idtcm_set_dpll_scsr_tod(channel, ts, SCSR_TOD_WR_TRIG_SEL_IMMEDIATE, @@ -1109,14 +1109,14 @@ static int set_tod_write_overhead(struct idtcm_channel *channel) return err; } -static int _idtcm_adjtime(struct idtcm_channel *channel, s64 delta) +static int _idtcm_adjtime_deprecated(struct idtcm_channel *channel, s64 delta) { int err; struct idtcm *idtcm = channel->idtcm; struct timespec64 ts; s64 now; - if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS) { + if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS_DEPRECATED) { err = idtcm_do_phase_pull_in(channel, delta, 0); } else { idtcm->calculate_overhead_flag = 1; @@ -1136,7 +1136,7 @@ static int _idtcm_adjtime(struct idtcm_channel *channel, s64 delta) ts = ns_to_timespec64(now); - err = _idtcm_settime(channel, &ts); + err = _idtcm_settime_deprecated(channel, &ts); } return err; @@ -1640,8 +1640,8 @@ static int idtcm_gettime(struct ptp_clock_info *ptp, struct timespec64 *ts) return err; } -static int idtcm_settime(struct ptp_clock_info *ptp, - const struct timespec64 *ts) +static int idtcm_settime_deprecated(struct ptp_clock_info *ptp, + const struct timespec64 *ts) { struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); @@ -1650,7 +1650,7 @@ static int idtcm_settime(struct ptp_clock_info *ptp, mutex_lock(&idtcm->reg_lock); - err = _idtcm_settime(channel, ts); + err = _idtcm_settime_deprecated(channel, ts); if (err) dev_err(&idtcm->client->dev, @@ -1663,7 +1663,7 @@ static int idtcm_settime(struct ptp_clock_info *ptp, return err; } -static int idtcm_settime_v487(struct ptp_clock_info *ptp, +static int idtcm_settime(struct ptp_clock_info *ptp, const struct timespec64 *ts) { struct idtcm_channel *channel = @@ -1673,7 +1673,7 @@ static int idtcm_settime_v487(struct ptp_clock_info *ptp, mutex_lock(&idtcm->reg_lock); - err = _idtcm_settime_v487(channel, ts, SCSR_TOD_WR_TYPE_SEL_ABSOLUTE); + err = _idtcm_settime(channel, ts, SCSR_TOD_WR_TYPE_SEL_ABSOLUTE); if (err) dev_err(&idtcm->client->dev, @@ -1686,7 +1686,7 @@ static int idtcm_settime_v487(struct ptp_clock_info *ptp, return err; } -static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta) +static int idtcm_adjtime_deprecated(struct ptp_clock_info *ptp, s64 delta) { struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); @@ -1695,7 +1695,7 @@ static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta) mutex_lock(&idtcm->reg_lock); - err = _idtcm_adjtime(channel, delta); + err = _idtcm_adjtime_deprecated(channel, delta); if (err) dev_err(&idtcm->client->dev, @@ -1708,7 +1708,7 @@ static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta) return err; } -static int idtcm_adjtime_v487(struct ptp_clock_info *ptp, s64 delta) +static int idtcm_adjtime(struct ptp_clock_info *ptp, s64 delta) { struct idtcm_channel *channel = container_of(ptp, struct idtcm_channel, caps); @@ -1717,7 +1717,7 @@ static int idtcm_adjtime_v487(struct ptp_clock_info *ptp, s64 delta) enum scsr_tod_write_type_sel type; int err; - if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS_V487) { + if (abs(delta) < PHASE_PULL_IN_THRESHOLD_NS) { err = idtcm_do_phase_pull_in(channel, delta, 0); if (err) dev_err(&idtcm->client->dev, @@ -1737,7 +1737,7 @@ static int idtcm_adjtime_v487(struct ptp_clock_info *ptp, s64 delta) mutex_lock(&idtcm->reg_lock); - err = _idtcm_settime_v487(channel, &ts, type); + err = _idtcm_settime(channel, &ts, type); if (err) dev_err(&idtcm->client->dev, @@ -2081,10 +2081,14 @@ static int idtcm_enable_tod(struct idtcm_channel *channel) if (err) return err; - return _idtcm_settime(channel, &ts); + if (idtcm->deprecated) + return _idtcm_settime_deprecated(channel, &ts); + else + return _idtcm_settime(channel, &ts, + SCSR_TOD_WR_TYPE_SEL_ABSOLUTE); } -static void idtcm_display_version_info(struct idtcm *idtcm) +static void idtcm_set_version_info(struct idtcm *idtcm) { u8 major; u8 minor; @@ -2106,31 +2110,36 @@ static void idtcm_display_version_info(struct idtcm *idtcm) snprintf(idtcm->version, sizeof(idtcm->version), "%u.%u.%u", major, minor, hotfix); + if (idtcm_strverscmp(idtcm->version, "4.8.7") >= 0) + idtcm->deprecated = 0; + else + idtcm->deprecated = 1; + dev_info(&idtcm->client->dev, fmt, major, minor, hotfix, product_id, hw_rev_id, config_select); } -static const struct ptp_clock_info idtcm_caps_v487 = { +static const struct ptp_clock_info idtcm_caps = { .owner = THIS_MODULE, .max_adj = 244000, .n_per_out = 12, .adjphase = &idtcm_adjphase, .adjfine = &idtcm_adjfine, - .adjtime = &idtcm_adjtime_v487, + .adjtime = &idtcm_adjtime, .gettime64 = &idtcm_gettime, - .settime64 = &idtcm_settime_v487, + .settime64 = &idtcm_settime, .enable = &idtcm_enable, }; -static const struct ptp_clock_info idtcm_caps = { +static const struct ptp_clock_info idtcm_caps_deprecated = { .owner = THIS_MODULE, .max_adj = 244000, .n_per_out = 12, .adjphase = &idtcm_adjphase, .adjfine = &idtcm_adjfine, - .adjtime = &idtcm_adjtime, + .adjtime = &idtcm_adjtime_deprecated, .gettime64 = &idtcm_gettime, - .settime64 = &idtcm_settime, + .settime64 = &idtcm_settime_deprecated, .enable = &idtcm_enable, }; @@ -2253,15 +2262,15 @@ static int idtcm_enable_channel(struct idtcm *idtcm, u32 index) channel->idtcm = idtcm; - if (idtcm_strverscmp(idtcm->version, "4.8.7") >= 0) - channel->caps = idtcm_caps_v487; + if (idtcm->deprecated) + channel->caps = idtcm_caps_deprecated; else channel->caps = idtcm_caps; snprintf(channel->caps.name, sizeof(channel->caps.name), "IDT CM TOD%u", index); - if (idtcm_strverscmp(idtcm->version, "4.8.7") >= 0) { + if (!idtcm->deprecated) { err = idtcm_enable_tod_sync(channel); if (err) { dev_err(&idtcm->client->dev, @@ -2360,7 +2369,7 @@ static int idtcm_probe(struct i2c_client *client, mutex_init(&idtcm->reg_lock); mutex_lock(&idtcm->reg_lock); - idtcm_display_version_info(idtcm); + idtcm_set_version_info(idtcm); err = idtcm_load_firmware(idtcm, &client->dev); diff --git a/drivers/ptp/ptp_clockmatrix.h b/drivers/ptp/ptp_clockmatrix.h index 3790dfa..645de2c 100644 --- a/drivers/ptp/ptp_clockmatrix.h +++ b/drivers/ptp/ptp_clockmatrix.h @@ -45,11 +45,11 @@ #define DEFAULT_TOD2_PTP_PLL (2) #define DEFAULT_TOD3_PTP_PLL (3) -#define POST_SM_RESET_DELAY_MS (3000) -#define PHASE_PULL_IN_THRESHOLD_NS (150000) -#define PHASE_PULL_IN_THRESHOLD_NS_V487 (15000) -#define TOD_WRITE_OVERHEAD_COUNT_MAX (2) -#define TOD_BYTE_COUNT (11) +#define POST_SM_RESET_DELAY_MS (3000) +#define PHASE_PULL_IN_THRESHOLD_NS_DEPRECATED (150000) +#define PHASE_PULL_IN_THRESHOLD_NS (15000) +#define TOD_WRITE_OVERHEAD_COUNT_MAX (2) +#define TOD_BYTE_COUNT (11) #define PEROUT_ENABLE_OUTPUT_MASK (0xdeadbeef) @@ -132,6 +132,7 @@ struct idtcm { u8 page_offset; u8 tod_mask; char version[16]; + u8 deprecated; /* Overhead calculation for adjtime */ u8 calculate_overhead_flag;