All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: Re: [RFC PATCH] clocksource: skip check while watchdog hung up or unstable
Date: Wed, 11 Aug 2021 21:00:17 +0800	[thread overview]
Message-ID: <202108112046.uBsbMjjA-lkp@intel.com> (raw)
In-Reply-To: <63064a758eb087febce3eff5b2c736a5449b3dd2.1628675461.git.brookxu@tencent.com>

[-- Attachment #1: Type: text/plain, Size: 7695 bytes --]

Hi brookxu,

[FYI, it's a private test report for your RFC patch.]
[auto build test WARNING on tip/timers/core]
[also build test WARNING on v5.14-rc5 next-20210811]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/brookxu/clocksource-skip-check-while-watchdog-hung-up-or-unstable/20210811-175707
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 1e7f7fbcd40c69d23e3fe641ead9f3dc128fa8aa
config: x86_64-randconfig-c001-20210810 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project d39ebdae674c8efc84ebe8dc32716ec353220530)
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/085c7bc9e8da6deabad14b2093bd8409cb77b3be
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review brookxu/clocksource-skip-check-while-watchdog-hung-up-or-unstable/20210811-175707
        git checkout 085c7bc9e8da6deabad14b2093bd8409cb77b3be
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 

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 >>):

>> kernel/time/clocksource.c:403:41: warning: more '%' conversions than data arguments [-Wformat-insufficient-args]
                           pr_warn("timekeeping watchdog on CPU%d seems hung up or unstable:");
                                                               ~^
   include/linux/printk.h:400:29: note: expanded from macro 'pr_warn'
           printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__)
                                      ^~~
   kernel/time/clocksource.c:8:41: note: expanded from macro 'pr_fmt'
   #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
                                           ^~~
   1 warning generated.


vim +403 kernel/time/clocksource.c

   352	
   353	static void clocksource_watchdog(struct timer_list *unused)
   354	{
   355		u64 csnow, wdnow, cslast, wdlast, delta;
   356		int next_cpu, reset_pending;
   357		int64_t wd_nsec, cs_nsec;
   358		struct clocksource *cs;
   359		u32 md;
   360	
   361		spin_lock(&watchdog_lock);
   362		if (!watchdog_running)
   363			goto out;
   364	
   365		reset_pending = atomic_read(&watchdog_reset_pending);
   366	
   367		list_for_each_entry(cs, &watchdog_list, wd_list) {
   368	
   369			/* Clocksource already marked unstable? */
   370			if (cs->flags & CLOCK_SOURCE_UNSTABLE) {
   371				if (finished_booting)
   372					schedule_work(&watchdog_work);
   373				continue;
   374			}
   375	
   376			if (!cs_watchdog_read(cs, &csnow, &wdnow)) {
   377				/* Clock readout unreliable, so give it up. */
   378				__clocksource_unstable(cs);
   379				continue;
   380			}
   381	
   382			/* Clocksource initialized ? */
   383			if (!(cs->flags & CLOCK_SOURCE_WATCHDOG) ||
   384			    atomic_read(&watchdog_reset_pending)) {
   385				cs->flags |= CLOCK_SOURCE_WATCHDOG;
   386				cs->wd_last = wdnow;
   387				cs->cs_last = csnow;
   388				continue;
   389			}
   390	
   391			delta = clocksource_delta(wdnow, cs->wd_last, watchdog->mask);
   392			wd_nsec = clocksource_cyc2ns(delta, watchdog->mult,
   393						     watchdog->shift);
   394	
   395			delta = clocksource_delta(csnow, cs->cs_last, cs->mask);
   396			cs_nsec = clocksource_cyc2ns(delta, cs->mult, cs->shift);
   397			wdlast = cs->wd_last; /* save these in case we print them */
   398			cslast = cs->cs_last;
   399			cs->cs_last = csnow;
   400			cs->wd_last = wdnow;
   401	
   402			if (!wd_nsec) {
 > 403				pr_warn("timekeeping watchdog on CPU%d seems hung up or unstable:");
   404				pr_warn("'%s' wd_now: %llx wd_last: %llx mask: %llx\n",
   405					watchdog->name, wdnow, wdlast, watchdog->mask);
   406				continue;
   407			}
   408	
   409			if (atomic_read(&watchdog_reset_pending))
   410				continue;
   411	
   412			/* Check the deviation from the watchdog clocksource. */
   413			md = cs->uncertainty_margin + watchdog->uncertainty_margin;
   414			if (abs(cs_nsec - wd_nsec) > md) {
   415				pr_warn("timekeeping watchdog on CPU%d: Marking clocksource '%s' as unstable because the skew is too large:\n",
   416					smp_processor_id(), cs->name);
   417				pr_warn("                      '%s' wd_nsec: %lld wd_now: %llx wd_last: %llx mask: %llx\n",
   418					watchdog->name, wd_nsec, wdnow, wdlast, watchdog->mask);
   419				pr_warn("                      '%s' cs_nsec: %lld cs_now: %llx cs_last: %llx mask: %llx\n",
   420					cs->name, cs_nsec, csnow, cslast, cs->mask);
   421				if (curr_clocksource == cs)
   422					pr_warn("                      '%s' is current clocksource.\n", cs->name);
   423				else if (curr_clocksource)
   424					pr_warn("                      '%s' (not '%s') is current clocksource.\n", curr_clocksource->name, cs->name);
   425				else
   426					pr_warn("                      No current clocksource.\n");
   427				__clocksource_unstable(cs);
   428				continue;
   429			}
   430	
   431			if (cs == curr_clocksource && cs->tick_stable)
   432				cs->tick_stable(cs);
   433	
   434			if (!(cs->flags & CLOCK_SOURCE_VALID_FOR_HRES) &&
   435			    (cs->flags & CLOCK_SOURCE_IS_CONTINUOUS) &&
   436			    (watchdog->flags & CLOCK_SOURCE_IS_CONTINUOUS)) {
   437				/* Mark it valid for high-res. */
   438				cs->flags |= CLOCK_SOURCE_VALID_FOR_HRES;
   439	
   440				/*
   441				 * clocksource_done_booting() will sort it if
   442				 * finished_booting is not set yet.
   443				 */
   444				if (!finished_booting)
   445					continue;
   446	
   447				/*
   448				 * If this is not the current clocksource let
   449				 * the watchdog thread reselect it. Due to the
   450				 * change to high res this clocksource might
   451				 * be preferred now. If it is the current
   452				 * clocksource let the tick code know about
   453				 * that change.
   454				 */
   455				if (cs != curr_clocksource) {
   456					cs->flags |= CLOCK_SOURCE_RESELECT;
   457					schedule_work(&watchdog_work);
   458				} else {
   459					tick_clock_notify();
   460				}
   461			}
   462		}
   463	
   464		/*
   465		 * We only clear the watchdog_reset_pending, when we did a
   466		 * full cycle through all clocksources.
   467		 */
   468		if (reset_pending)
   469			atomic_dec(&watchdog_reset_pending);
   470	
   471		/*
   472		 * Cycle through CPUs to check if the CPUs stay synchronized
   473		 * to each other.
   474		 */
   475		next_cpu = cpumask_next(raw_smp_processor_id(), cpu_online_mask);
   476		if (next_cpu >= nr_cpu_ids)
   477			next_cpu = cpumask_first(cpu_online_mask);
   478	
   479		/*
   480		 * Arm timer if not already pending: could race with concurrent
   481		 * pair clocksource_stop_watchdog() clocksource_start_watchdog().
   482		 */
   483		if (!timer_pending(&watchdog_timer)) {
   484			watchdog_timer.expires += WATCHDOG_INTERVAL;
   485			add_timer_on(&watchdog_timer, next_cpu);
   486		}
   487	out:
   488		spin_unlock(&watchdog_lock);
   489	}
   490	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 36329 bytes --]

      parent reply	other threads:[~2021-08-11 13:00 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-11  9:55 [RFC PATCH] clocksource: skip check while watchdog hung up or unstable brookxu
2021-08-11 12:44 ` Thomas Gleixner
2021-08-11 13:18   ` brookxu
2021-08-11 14:01     ` Thomas Gleixner
2021-08-11 15:26       ` brookxu
2021-08-12 10:53         ` Thomas Gleixner
2021-08-13  0:54           ` brookxu
2021-08-11 13:00 ` kernel test robot [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202108112046.uBsbMjjA-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=kbuild-all@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.