lkml.org 
[lkml]   [2018]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH] tick/broadcast: set next event of bc to KTIME_MAX
From
Date
Hi,

This patch needs refine and I'll check more. Thanks a lot.

On 2018年02月05日 10:17, kbuild test robot wrote:
> Hi Qiao,
>
> Thank you for the patch! Yet something to improve:
>
> [auto build test ERROR on tip/timers/nohz]
> [also build test ERROR on v4.15]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>
> url: https://github.com/0day-ci/linux/commits/Qiao-Zhou/tick-broadcast-set-next-event-of-bc-to-KTIME_MAX/20180205-093126
> config: x86_64-randconfig-x017-201805 (attached as .config)
> compiler: gcc-7 (Debian 7.2.0-12) 7.2.1 20171025
> reproduce:
> # save the attached .config to linux build tree
> make ARCH=x86_64
>
> All errors (new ones prefixed by >>):
>
> kernel/time/tick-broadcast.c: In function 'tick_handle_oneshot_broadcast':
>>> kernel/time/tick-broadcast.c:669:18: error: request for member 'tv64' in something not a structure or union
> dev->next_event.tv64 = KTIME_MAX;
> ^
>
> vim +/tv64 +669 kernel/time/tick-broadcast.c
>
> 595
> 596 /*
> 597 * Handle oneshot mode broadcasting
> 598 */
> 599 static void tick_handle_oneshot_broadcast(struct clock_event_device *dev)
> 600 {
> 601 struct tick_device *td;
> 602 ktime_t now, next_event;
> 603 int cpu, next_cpu = 0;
> 604 bool bc_local;
> 605
> 606 raw_spin_lock(&tick_broadcast_lock);
> 607 dev->next_event = KTIME_MAX;
> 608 next_event = KTIME_MAX;
> 609 cpumask_clear(tmpmask);
> 610 now = ktime_get();
> 611 /* Find all expired events */
> 612 for_each_cpu(cpu, tick_broadcast_oneshot_mask) {
> 613 td = &per_cpu(tick_cpu_device, cpu);
> 614 if (td->evtdev->next_event <= now) {
> 615 cpumask_set_cpu(cpu, tmpmask);
> 616 /*
> 617 * Mark the remote cpu in the pending mask, so
> 618 * it can avoid reprogramming the cpu local
> 619 * timer in tick_broadcast_oneshot_control().
> 620 */
> 621 cpumask_set_cpu(cpu, tick_broadcast_pending_mask);
> 622 } else if (td->evtdev->next_event < next_event) {
> 623 next_event = td->evtdev->next_event;
> 624 next_cpu = cpu;
> 625 }
> 626 }
> 627
> 628 /*
> 629 * Remove the current cpu from the pending mask. The event is
> 630 * delivered immediately in tick_do_broadcast() !
> 631 */
> 632 cpumask_clear_cpu(smp_processor_id(), tick_broadcast_pending_mask);
> 633
> 634 /* Take care of enforced broadcast requests */
> 635 cpumask_or(tmpmask, tmpmask, tick_broadcast_force_mask);
> 636 cpumask_clear(tick_broadcast_force_mask);
> 637
> 638 /*
> 639 * Sanity check. Catch the case where we try to broadcast to
> 640 * offline cpus.
> 641 */
> 642 if (WARN_ON_ONCE(!cpumask_subset(tmpmask, cpu_online_mask)))
> 643 cpumask_and(tmpmask, tmpmask, cpu_online_mask);
> 644
> 645 /*
> 646 * Wakeup the cpus which have an expired event.
> 647 */
> 648 bc_local = tick_do_broadcast(tmpmask);
> 649
> 650 /*
> 651 * Two reasons for reprogram:
> 652 *
> 653 * - The global event did not expire any CPU local
> 654 * events. This happens in dyntick mode, as the maximum PIT
> 655 * delta is quite small.
> 656 *
> 657 * - There are pending events on sleeping CPUs which were not
> 658 * in the event mask
> 659 */
> 660 if (next_event != KTIME_MAX)
> 661 tick_broadcast_set_event(dev, next_cpu, next_event);
> 662 else
> 663 /*
> 664 * not program broadcast timer, but set the value to show that
> 665 * the next event is not set, which is used in
> 666 * __tick_broadcast_oneshot_control in idle tick_broadcast
> 667 * enter/exit control flow.
> 668 */
> > 669 dev->next_event.tv64 = KTIME_MAX;
> 670
> 671 raw_spin_unlock(&tick_broadcast_lock);
> 672
> 673 if (bc_local) {
> 674 td = this_cpu_ptr(&tick_cpu_device);
> 675 td->evtdev->event_handler(td->evtdev);
> 676 }
> 677 }
> 678
>
> ---
> 0-DAY kernel test infrastructure Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all Intel Corporation
>

\
 
 \ /
  Last update: 2018-02-05 09:25    [W:0.043 / U:1.540 seconds]
©2003-2018 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site