All of lore.kernel.org
 help / color / mirror / Atom feed
* [dwmw2:hardpps-filter-soak 15/23] drivers/pps/clients/pps-gpio-spin.c:259:28: error: 'struct pps_event_time' has no member named 'ts_raw'; did you mean 'ts_real'?
@ 2026-10-05  3:46 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-05  3:46 UTC (permalink / raw)
  To: David Woodhouse; +Cc: oe-kbuild-all

tree:   git://git.infradead.org/users/dwmw2/linux hardpps-filter-soak
head:   eef47b09d53ef553d3089bce6c9a0f6a9c792f29
commit: eb57681e2ecf93179ad3e658a98646183bfb9fdf [15/23] [TEST HACKS] mode-3 differential capture instrumentation
config: um-i386_defconfig (https://download.01.org/0day-ci/archive/20261005/202610051157.SbcmBsQA-lkp@intel.com/config)
compiler: gcc-14 (Debian 14.2.0-19) 14.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20261005/202610051157.SbcmBsQA-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202610051157.SbcmBsQA-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from arch/x86/include/asm/clock_inlined.h:5,
                    from drivers/pps/clients/pps-gpio-spin.c:52:
>> arch/x86/include/asm/tsc.h:70:28: error: conflicting types for 'cycles_t'; have 'long long unsigned int'
      70 | typedef unsigned long long cycles_t;
         |                            ^~~~~~~~
   In file included from arch/um/include/asm/timex.h:11,
                    from include/linux/timex.h:67,
                    from include/linux/time32.h:13,
                    from include/linux/time.h:60,
                    from include/linux/stat.h:19,
                    from include/linux/module.h:13,
                    from drivers/pps/clients/pps-gpio-spin.c:44:
   include/asm-generic/timex.h:8:23: note: previous declaration of 'cycles_t' with type 'cycles_t' {aka 'long unsigned int'}
       8 | typedef unsigned long cycles_t;
         |                       ^~~~~~~~
>> arch/x86/include/asm/tsc.h:77:24: error: conflicting types for 'get_cycles'; have 'cycles_t(void)' {aka 'long long unsigned int(void)'}
      77 | static inline cycles_t get_cycles(void)
         |                        ^~~~~~~~~~
   include/asm-generic/timex.h:10:24: note: previous definition of 'get_cycles' with type 'cycles_t(void)' {aka 'long unsigned int(void)'}
      10 | static inline cycles_t get_cycles(void)
         |                        ^~~~~~~~~~
   In file included from arch/x86/include/asm/tsc.h:9:
   arch/x86/include/asm/tsc.h: In function 'get_cycles':
   arch/um/include/asm/cpufeature.h:52:39: error: implicit declaration of function 'DISABLED_MASK_BIT_SET' [-Wimplicit-function-declaration]
      52 |         (__builtin_constant_p(bit) && DISABLED_MASK_BIT_SET(bit) ? 0 : _static_cpu_has(bit))
         |                                       ^~~~~~~~~~~~~~~~~~~~~
   arch/x86/include/asm/tsc.h:79:14: note: in expansion of macro 'cpu_feature_enabled'
      79 |         if (!cpu_feature_enabled(X86_FEATURE_TSC))
         |              ^~~~~~~~~~~~~~~~~~~
   arch/um/include/asm/cpufeature.h:115:17: error: implicit declaration of function '_static_cpu_has'; did you mean '__static_cpu_has'? [-Wimplicit-function-declaration]
     115 |                 _static_cpu_has(bit)                            \
         |                 ^~~~~~~~~~~~~~~
   arch/um/include/asm/cpufeature.h:52:72: note: in expansion of macro '_static_cpu_has'
      52 |         (__builtin_constant_p(bit) && DISABLED_MASK_BIT_SET(bit) ? 0 : _static_cpu_has(bit))
         |                                                                        ^~~~~~~~~~~~~~~
   arch/x86/include/asm/tsc.h:79:14: note: in expansion of macro 'cpu_feature_enabled'
      79 |         if (!cpu_feature_enabled(X86_FEATURE_TSC))
         |              ^~~~~~~~~~~~~~~~~~~
   drivers/pps/clients/pps-gpio-spin.c: In function 'spin_do_spin':
>> drivers/pps/clients/pps-gpio-spin.c:259:28: error: 'struct pps_event_time' has no member named 'ts_raw'; did you mean 'ts_real'?
     259 |                         ts.ts_raw = ktime_to_timespec64(xt.sys_monoraw);
         |                            ^~~~~~
         |                            ts_real
   drivers/pps/clients/pps-gpio-spin.c: In function 'spin3_start_fn':
>> drivers/pps/clients/pps-gpio-spin.c:336:13: error: implicit declaration of function 'kzalloc' [-Wimplicit-function-declaration]
     336 |         d = kzalloc(sizeof(*d), GFP_KERNEL);
         |             ^~~~~~~
>> drivers/pps/clients/pps-gpio-spin.c:336:11: error: assignment to 'struct pps_gpio_spin *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     336 |         d = kzalloc(sizeof(*d), GFP_KERNEL);
         |           ^
>> drivers/pps/clients/pps-gpio-spin.c:342:17: error: implicit declaration of function 'kfree' [-Wimplicit-function-declaration]
     342 |                 kfree(d);
         |                 ^~~~~


vim +259 drivers/pps/clients/pps-gpio-spin.c

   168	
   169	/* SPIN phase: IRQs-off busy wait across the edge, timestamp, pps_event */
   170	static ktime_t spin_do_spin(struct pps_gpio_spin *d)
   171	{
   172		struct pps_event_time ts;
   173		u64 c1 = 0, c2 = 0, cstamp = 0, cdone;
   174		unsigned long flags;
   175		ktime_t mono;
   176		long i;
   177		bool edge = false, applied = false;
   178	
   179		local_irq_save(flags);
   180		if (mode == 0) {
   181			pps_get_ts(&ts);	/* cache warm, discarded (as original) */
   182			for (i = 0; i < max_iter; i++) {
   183				if (gpiod_get_value(d->gpiod)) {
   184					edge = true;
   185					break;
   186				}
   187			}
   188			cstamp = arch_inlined_clocksource_read(NULL);
   189			if (edge)
   190				pps_get_ts(&ts);
   191		} else if (mode >= 2 && d->din) {
   192			u32 bit = BIT(din_bit);
   193	
   194			c2 = arch_inlined_clocksource_read(NULL);
   195			for (i = 0; i < max_iter; i++) {
   196				c1 = c2;
   197				if (readl_relaxed(d->din) & bit) {
   198					edge = true;
   199					c2 = arch_inlined_clocksource_read(NULL);
   200					break;
   201				}
   202				c2 = arch_inlined_clocksource_read(NULL);
   203			}
   204			cstamp = c1 + ((c2 - c1) >> 1);
   205		} else {
   206			c2 = arch_inlined_clocksource_read(NULL);
   207			for (i = 0; i < max_iter; i++) {
   208				c1 = c2;
   209				if (gpiod_get_value(d->gpiod)) {
   210					edge = true;
   211					c2 = arch_inlined_clocksource_read(NULL);
   212					break;
   213				}
   214				c2 = arch_inlined_clocksource_read(NULL);
   215			}
   216			cstamp = c1 + ((c2 - c1) >> 1);
   217		}
   218		mono = ktime_get();
   219		local_irq_restore(flags);
   220	
   221		/* i == 0: pulse already high at wake -- not a timed edge */
   222		if (!edge || i == 0) {
   223			pr_info_ratelimited("lost sync (edge=%d i=%ld), re-acquiring\n",
   224					    edge, i);
   225			d->state = ST_POLL;
   226			d->gpio_prev = 1;	/* don't trigger on the current pulse */
   227			d->have_last = false;
   228			return ns_to_ktime((s64)poll_us * 1000);
   229		}
   230	
   231		if (mode == 3) {
   232			/*
   233			 * Differential run: publish the capture for the pps-gpio
   234			 * hardirq (same pulse, runs a few us later on CPU0) and
   235			 * do NOT feed PPS -- the irq driver owns /dev/pps0.
   236			 */
   237			pps_spin3_seq++;
   238			smp_wmb();
   239			pps_spin3_count = cstamp;
   240			pps_spin3_bracket = c2 - c1;
   241			smp_wmb();
   242			pps_spin3_seq++;
   243			goto rearm;
   244		}
   245	
   246		if (mode >= 1) {
   247			struct system_time_snapshot snap;
   248			struct system_counterval_t scv = { };
   249			struct system_device_crosststamp xt;
   250	
   251			ktime_get_snapshot_id(CLOCK_REALTIME, &snap);
   252			scv.cycles = cstamp;
   253			scv.cs_id = snap.cs_id;
   254			xt.clock_id = CLOCK_REALTIME;
   255			if (!get_device_system_crosststamp(spin_get_time, &scv,
   256					d->history_valid ? &d->history_snap : NULL,
   257					&xt)) {
   258				ts.ts_real = ktime_to_timespec64(xt.sys_systime);
 > 259				ts.ts_raw = ktime_to_timespec64(xt.sys_monoraw);
   260				applied = true;
   261			} else {
   262				pps_get_ts(&ts);	/* fallback: stamp now */
   263			}
   264			d->history_snap = snap;
   265			d->history_valid = true;
   266		}
   267	
   268		pps_event(d->pps, &ts, PPS_CAPTUREASSERT, NULL);
   269		cdone = arch_inlined_clocksource_read(NULL);
   270	
   271		/*
   272		 * TEST HACK: feed the per-pulse telemetry ring (same format as the
   273		 * irq driver's) so the bench dump and heartbeat see our pulses.
   274		 */
   275		{
   276			extern s64 pps_ntperr_ring[4096][6];
   277			extern unsigned int pps_ntperr_head;
   278			struct system_time_snapshot snap;
   279	
   280			ktime_get_snapshot_id(CLOCK_REALTIME, &snap);
   281			if (pps_ntperr_head < 4096) {
   282				s64 *row = pps_ntperr_ring[pps_ntperr_head++];
   283				s64 phase = ts.ts_real.tv_nsec;
   284	
   285				if (phase >= NSEC_PER_SEC / 2)
   286					phase -= NSEC_PER_SEC;
   287	
   288				row[0] = snap.ntp_error;
   289				row[1] = snap.tk_ntp_error;
   290				row[2] = snap.ntp_err_frac;
   291				row[3] = snap.cycle_delta;
   292				row[4] = phase;
   293				row[5] = snap.ntp_err_mult;
   294			}
   295		}
   296	
   297		printk_deferred(KERN_INFO "pps-gpio-spin: SPIN iters=%ld lat=%llu mode=%d applied=%d\n",
   298				i, mode == 0 ? cdone - cstamp : (c2 - c1) >> 1,
   299				mode, applied);
   300	
   301	rearm:
   302		/* re-arm: wake spin_us before the next expected edge */
   303		if (d->have_last) {
   304			ktime_t period = ktime_sub(mono, d->last_mono);
   305			s64 pns = ktime_to_ns(period);
   306	
   307			if (pns < (s64)interval_s * NSEC_PER_SEC / 2 ||
   308			    pns > (s64)interval_s * 3 * NSEC_PER_SEC / 2)
   309				period = ktime_set(interval_s, 0);
   310			d->last_mono = mono;
   311			return ktime_sub_ns(period, (s64)spin_us * 1000);
   312		}
   313		d->last_mono = mono;
   314		d->have_last = true;
   315		return ktime_sub_ns(ktime_set(interval_s, 0), (s64)spin_us * 1000);
   316	}
   317	
   318	static enum hrtimer_restart spin_fire(struct hrtimer *t)
   319	{
   320		struct pps_gpio_spin *d = container_of(t, struct pps_gpio_spin, timer);
   321		ktime_t next;
   322	
   323		if (d->state == ST_POLL)
   324			next = spin_do_poll(d);
   325		else
   326			next = spin_do_spin(d);
   327	
   328		hrtimer_forward_now(t, next);
   329		return HRTIMER_RESTART;
   330	}
   331	
   332	static void spin3_start_fn(struct work_struct *w)
   333	{
   334		struct pps_gpio_spin *d;
   335	
 > 336		d = kzalloc(sizeof(*d), GFP_KERNEL);
   337		if (!d)
   338			return;
   339		d->din = ioremap(din_phys, 4);
   340		if (!d->din) {
   341			pr_warn("mode 3: DIN ioremap failed\n");
 > 342			kfree(d);
   343			return;
   344		}
   345		d->state = ST_POLL;
   346		d->gpio_prev = 1;
   347		hrtimer_setup(&d->timer, spin_fire, CLOCK_MONOTONIC,
   348			      HRTIMER_MODE_REL_PINNED_HARD);
   349		spin3 = d;
   350		/* runs on CPU1 (schedule_work_on); PINNED keeps it here */
   351		hrtimer_start(&d->timer, ms_to_ktime(10),
   352			      HRTIMER_MODE_REL_PINNED_HARD);
   353		pr_info("mode 3 differential capture started on CPU%d\n",
   354			smp_processor_id());
   355	}
   356	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-10-05  3:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-05  3:46 [dwmw2:hardpps-filter-soak 15/23] drivers/pps/clients/pps-gpio-spin.c:259:28: error: 'struct pps_event_time' has no member named 'ts_raw'; did you mean 'ts_real'? kernel test robot

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.