Lines Matching refs:vtime

634 static u64 vtime_delta(struct vtime *vtime)  in vtime_delta()  argument
639 if (clock < vtime->starttime) in vtime_delta()
642 return clock - vtime->starttime; in vtime_delta()
645 static u64 get_vtime_delta(struct vtime *vtime) in get_vtime_delta() argument
647 u64 delta = vtime_delta(vtime); in get_vtime_delta()
658 WARN_ON_ONCE(vtime->state == VTIME_INACTIVE); in get_vtime_delta()
659 vtime->starttime += delta; in get_vtime_delta()
665 struct vtime *vtime) in vtime_account_system() argument
667 vtime->stime += get_vtime_delta(vtime); in vtime_account_system()
668 if (vtime->stime >= TICK_NSEC) { in vtime_account_system()
669 account_system_time(tsk, irq_count(), vtime->stime); in vtime_account_system()
670 vtime->stime = 0; in vtime_account_system()
675 struct vtime *vtime) in vtime_account_guest() argument
677 vtime->gtime += get_vtime_delta(vtime); in vtime_account_guest()
678 if (vtime->gtime >= TICK_NSEC) { in vtime_account_guest()
679 account_guest_time(tsk, vtime->gtime); in vtime_account_guest()
680 vtime->gtime = 0; in vtime_account_guest()
685 struct vtime *vtime) in __vtime_account_kernel() argument
688 if (vtime->state == VTIME_GUEST) in __vtime_account_kernel()
689 vtime_account_guest(tsk, vtime); in __vtime_account_kernel()
691 vtime_account_system(tsk, vtime); in __vtime_account_kernel()
696 struct vtime *vtime = &tsk->vtime; in vtime_account_kernel() local
698 if (!vtime_delta(vtime)) in vtime_account_kernel()
701 write_seqcount_begin(&vtime->seqcount); in vtime_account_kernel()
702 __vtime_account_kernel(tsk, vtime); in vtime_account_kernel()
703 write_seqcount_end(&vtime->seqcount); in vtime_account_kernel()
708 struct vtime *vtime = &tsk->vtime; in vtime_user_enter() local
710 write_seqcount_begin(&vtime->seqcount); in vtime_user_enter()
711 vtime_account_system(tsk, vtime); in vtime_user_enter()
712 vtime->state = VTIME_USER; in vtime_user_enter()
713 write_seqcount_end(&vtime->seqcount); in vtime_user_enter()
718 struct vtime *vtime = &tsk->vtime; in vtime_user_exit() local
720 write_seqcount_begin(&vtime->seqcount); in vtime_user_exit()
721 vtime->utime += get_vtime_delta(vtime); in vtime_user_exit()
722 if (vtime->utime >= TICK_NSEC) { in vtime_user_exit()
723 account_user_time(tsk, vtime->utime); in vtime_user_exit()
724 vtime->utime = 0; in vtime_user_exit()
726 vtime->state = VTIME_SYS; in vtime_user_exit()
727 write_seqcount_end(&vtime->seqcount); in vtime_user_exit()
732 struct vtime *vtime = &tsk->vtime; in vtime_guest_enter() local
740 write_seqcount_begin(&vtime->seqcount); in vtime_guest_enter()
741 vtime_account_system(tsk, vtime); in vtime_guest_enter()
743 vtime->state = VTIME_GUEST; in vtime_guest_enter()
744 write_seqcount_end(&vtime->seqcount); in vtime_guest_enter()
750 struct vtime *vtime = &tsk->vtime; in vtime_guest_exit() local
752 write_seqcount_begin(&vtime->seqcount); in vtime_guest_exit()
753 vtime_account_guest(tsk, vtime); in vtime_guest_exit()
755 vtime->state = VTIME_SYS; in vtime_guest_exit()
756 write_seqcount_end(&vtime->seqcount); in vtime_guest_exit()
762 account_idle_time(get_vtime_delta(&tsk->vtime)); in vtime_account_idle()
767 struct vtime *vtime = &prev->vtime; in vtime_task_switch_generic() local
769 write_seqcount_begin(&vtime->seqcount); in vtime_task_switch_generic()
770 if (vtime->state == VTIME_IDLE) in vtime_task_switch_generic()
773 __vtime_account_kernel(prev, vtime); in vtime_task_switch_generic()
774 vtime->state = VTIME_INACTIVE; in vtime_task_switch_generic()
775 vtime->cpu = -1; in vtime_task_switch_generic()
776 write_seqcount_end(&vtime->seqcount); in vtime_task_switch_generic()
778 vtime = &current->vtime; in vtime_task_switch_generic()
780 write_seqcount_begin(&vtime->seqcount); in vtime_task_switch_generic()
782 vtime->state = VTIME_IDLE; in vtime_task_switch_generic()
784 vtime->state = VTIME_GUEST; in vtime_task_switch_generic()
786 vtime->state = VTIME_SYS; in vtime_task_switch_generic()
787 vtime->starttime = sched_clock(); in vtime_task_switch_generic()
788 vtime->cpu = smp_processor_id(); in vtime_task_switch_generic()
789 write_seqcount_end(&vtime->seqcount); in vtime_task_switch_generic()
794 struct vtime *vtime = &t->vtime; in vtime_init_idle() local
798 write_seqcount_begin(&vtime->seqcount); in vtime_init_idle()
799 vtime->state = VTIME_IDLE; in vtime_init_idle()
800 vtime->starttime = sched_clock(); in vtime_init_idle()
801 vtime->cpu = cpu; in vtime_init_idle()
802 write_seqcount_end(&vtime->seqcount); in vtime_init_idle()
808 struct vtime *vtime = &t->vtime; in task_gtime() local
816 seq = read_seqcount_begin(&vtime->seqcount); in task_gtime()
819 if (vtime->state == VTIME_GUEST) in task_gtime()
820 gtime += vtime->gtime + vtime_delta(vtime); in task_gtime()
822 } while (read_seqcount_retry(&vtime->seqcount, seq)); in task_gtime()
834 struct vtime *vtime = &t->vtime; in task_cputime() local
847 seq = read_seqcount_begin(&vtime->seqcount); in task_cputime()
853 if (vtime->state < VTIME_SYS) in task_cputime()
857 delta = vtime_delta(vtime); in task_cputime()
863 if (vtime->state == VTIME_SYS) in task_cputime()
864 *stime += vtime->stime + delta; in task_cputime()
866 *utime += vtime->utime + delta; in task_cputime()
867 } while (read_seqcount_retry(&vtime->seqcount, seq)); in task_cputime()
872 static int vtime_state_fetch(struct vtime *vtime, int cpu) in vtime_state_fetch() argument
874 int state = READ_ONCE(vtime->state); in vtime_state_fetch()
880 if (vtime->cpu != cpu && vtime->cpu != -1) in vtime_state_fetch()
898 static u64 kcpustat_user_vtime(struct vtime *vtime) in kcpustat_user_vtime() argument
900 if (vtime->state == VTIME_USER) in kcpustat_user_vtime()
901 return vtime->utime + vtime_delta(vtime); in kcpustat_user_vtime()
902 else if (vtime->state == VTIME_GUEST) in kcpustat_user_vtime()
903 return vtime->gtime + vtime_delta(vtime); in kcpustat_user_vtime()
912 struct vtime *vtime = &tsk->vtime; in kcpustat_field_vtime() local
918 seq = read_seqcount_begin(&vtime->seqcount); in kcpustat_field_vtime()
920 state = vtime_state_fetch(vtime, cpu); in kcpustat_field_vtime()
936 *val += vtime->stime + vtime_delta(vtime); in kcpustat_field_vtime()
940 *val += kcpustat_user_vtime(vtime); in kcpustat_field_vtime()
944 *val += kcpustat_user_vtime(vtime); in kcpustat_field_vtime()
948 *val += vtime->gtime + vtime_delta(vtime); in kcpustat_field_vtime()
952 *val += vtime->gtime + vtime_delta(vtime); in kcpustat_field_vtime()
957 } while (read_seqcount_retry(&vtime->seqcount, seq)); in kcpustat_field_vtime()
1000 struct vtime *vtime = &tsk->vtime; in kcpustat_cpu_fetch_vtime() local
1008 seq = read_seqcount_begin(&vtime->seqcount); in kcpustat_cpu_fetch_vtime()
1010 state = vtime_state_fetch(vtime, cpu); in kcpustat_cpu_fetch_vtime()
1021 delta = vtime_delta(vtime); in kcpustat_cpu_fetch_vtime()
1028 cpustat[CPUTIME_SYSTEM] += vtime->stime + delta; in kcpustat_cpu_fetch_vtime()
1031 cpustat[CPUTIME_NICE] += vtime->utime + delta; in kcpustat_cpu_fetch_vtime()
1033 cpustat[CPUTIME_USER] += vtime->utime + delta; in kcpustat_cpu_fetch_vtime()
1037 cpustat[CPUTIME_GUEST_NICE] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1038 cpustat[CPUTIME_NICE] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1040 cpustat[CPUTIME_GUEST] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1041 cpustat[CPUTIME_USER] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1044 } while (read_seqcount_retry(&vtime->seqcount, seq)); in kcpustat_cpu_fetch_vtime()