Lines Matching refs:vtime

645 static u64 vtime_delta(struct vtime *vtime)  in vtime_delta()  argument
650 if (clock < vtime->starttime) in vtime_delta()
653 return clock - vtime->starttime; in vtime_delta()
656 static u64 get_vtime_delta(struct vtime *vtime) in get_vtime_delta() argument
658 u64 delta = vtime_delta(vtime); in get_vtime_delta()
669 WARN_ON_ONCE(vtime->state == VTIME_INACTIVE); in get_vtime_delta()
670 vtime->starttime += delta; in get_vtime_delta()
676 struct vtime *vtime) in vtime_account_system() argument
678 vtime->stime += get_vtime_delta(vtime); in vtime_account_system()
679 if (vtime->stime >= TICK_NSEC) { in vtime_account_system()
680 account_system_time(tsk, irq_count(), vtime->stime); in vtime_account_system()
681 vtime->stime = 0; in vtime_account_system()
686 struct vtime *vtime) in vtime_account_guest() argument
688 vtime->gtime += get_vtime_delta(vtime); in vtime_account_guest()
689 if (vtime->gtime >= TICK_NSEC) { in vtime_account_guest()
690 account_guest_time(tsk, vtime->gtime); in vtime_account_guest()
691 vtime->gtime = 0; in vtime_account_guest()
696 struct vtime *vtime) in __vtime_account_kernel() argument
699 if (vtime->state == VTIME_GUEST) in __vtime_account_kernel()
700 vtime_account_guest(tsk, vtime); in __vtime_account_kernel()
702 vtime_account_system(tsk, vtime); in __vtime_account_kernel()
707 struct vtime *vtime = &tsk->vtime; in vtime_account_kernel() local
709 if (!vtime_delta(vtime)) in vtime_account_kernel()
712 write_seqcount_begin(&vtime->seqcount); in vtime_account_kernel()
713 __vtime_account_kernel(tsk, vtime); in vtime_account_kernel()
714 write_seqcount_end(&vtime->seqcount); in vtime_account_kernel()
719 struct vtime *vtime = &tsk->vtime; in vtime_user_enter() local
721 write_seqcount_begin(&vtime->seqcount); in vtime_user_enter()
722 vtime_account_system(tsk, vtime); in vtime_user_enter()
723 vtime->state = VTIME_USER; in vtime_user_enter()
724 write_seqcount_end(&vtime->seqcount); in vtime_user_enter()
729 struct vtime *vtime = &tsk->vtime; in vtime_user_exit() local
731 write_seqcount_begin(&vtime->seqcount); in vtime_user_exit()
732 vtime->utime += get_vtime_delta(vtime); in vtime_user_exit()
733 if (vtime->utime >= TICK_NSEC) { in vtime_user_exit()
734 account_user_time(tsk, vtime->utime); in vtime_user_exit()
735 vtime->utime = 0; in vtime_user_exit()
737 vtime->state = VTIME_SYS; in vtime_user_exit()
738 write_seqcount_end(&vtime->seqcount); in vtime_user_exit()
743 struct vtime *vtime = &tsk->vtime; in vtime_guest_enter() local
751 write_seqcount_begin(&vtime->seqcount); in vtime_guest_enter()
752 vtime_account_system(tsk, vtime); in vtime_guest_enter()
754 vtime->state = VTIME_GUEST; in vtime_guest_enter()
755 write_seqcount_end(&vtime->seqcount); in vtime_guest_enter()
761 struct vtime *vtime = &tsk->vtime; in vtime_guest_exit() local
763 write_seqcount_begin(&vtime->seqcount); in vtime_guest_exit()
764 vtime_account_guest(tsk, vtime); in vtime_guest_exit()
766 vtime->state = VTIME_SYS; in vtime_guest_exit()
767 write_seqcount_end(&vtime->seqcount); in vtime_guest_exit()
773 account_idle_time(get_vtime_delta(&tsk->vtime)); in vtime_account_idle()
778 struct vtime *vtime = &prev->vtime; in vtime_task_switch_generic() local
780 write_seqcount_begin(&vtime->seqcount); in vtime_task_switch_generic()
781 if (vtime->state == VTIME_IDLE) in vtime_task_switch_generic()
784 __vtime_account_kernel(prev, vtime); in vtime_task_switch_generic()
785 vtime->state = VTIME_INACTIVE; in vtime_task_switch_generic()
786 vtime->cpu = -1; in vtime_task_switch_generic()
787 write_seqcount_end(&vtime->seqcount); in vtime_task_switch_generic()
789 vtime = &current->vtime; in vtime_task_switch_generic()
791 write_seqcount_begin(&vtime->seqcount); in vtime_task_switch_generic()
793 vtime->state = VTIME_IDLE; in vtime_task_switch_generic()
795 vtime->state = VTIME_GUEST; in vtime_task_switch_generic()
797 vtime->state = VTIME_SYS; in vtime_task_switch_generic()
798 vtime->starttime = sched_clock(); in vtime_task_switch_generic()
799 vtime->cpu = smp_processor_id(); in vtime_task_switch_generic()
800 write_seqcount_end(&vtime->seqcount); in vtime_task_switch_generic()
805 struct vtime *vtime = &t->vtime; in vtime_init_idle() local
809 write_seqcount_begin(&vtime->seqcount); in vtime_init_idle()
810 vtime->state = VTIME_IDLE; in vtime_init_idle()
811 vtime->starttime = sched_clock(); in vtime_init_idle()
812 vtime->cpu = cpu; in vtime_init_idle()
813 write_seqcount_end(&vtime->seqcount); in vtime_init_idle()
819 struct vtime *vtime = &t->vtime; in task_gtime() local
827 seq = read_seqcount_begin(&vtime->seqcount); in task_gtime()
830 if (vtime->state == VTIME_GUEST) in task_gtime()
831 gtime += vtime->gtime + vtime_delta(vtime); in task_gtime()
833 } while (read_seqcount_retry(&vtime->seqcount, seq)); in task_gtime()
845 struct vtime *vtime = &t->vtime; in task_cputime() local
858 seq = read_seqcount_begin(&vtime->seqcount); in task_cputime()
864 if (vtime->state < VTIME_SYS) in task_cputime()
868 delta = vtime_delta(vtime); in task_cputime()
874 if (vtime->state == VTIME_SYS) in task_cputime()
875 *stime += vtime->stime + delta; in task_cputime()
877 *utime += vtime->utime + delta; in task_cputime()
878 } while (read_seqcount_retry(&vtime->seqcount, seq)); in task_cputime()
883 static int vtime_state_fetch(struct vtime *vtime, int cpu) in vtime_state_fetch() argument
885 int state = READ_ONCE(vtime->state); in vtime_state_fetch()
891 if (vtime->cpu != cpu && vtime->cpu != -1) in vtime_state_fetch()
909 static u64 kcpustat_user_vtime(struct vtime *vtime) in kcpustat_user_vtime() argument
911 if (vtime->state == VTIME_USER) in kcpustat_user_vtime()
912 return vtime->utime + vtime_delta(vtime); in kcpustat_user_vtime()
913 else if (vtime->state == VTIME_GUEST) in kcpustat_user_vtime()
914 return vtime->gtime + vtime_delta(vtime); in kcpustat_user_vtime()
923 struct vtime *vtime = &tsk->vtime; in kcpustat_field_vtime() local
929 seq = read_seqcount_begin(&vtime->seqcount); in kcpustat_field_vtime()
931 state = vtime_state_fetch(vtime, cpu); in kcpustat_field_vtime()
947 *val += vtime->stime + vtime_delta(vtime); in kcpustat_field_vtime()
951 *val += kcpustat_user_vtime(vtime); in kcpustat_field_vtime()
955 *val += kcpustat_user_vtime(vtime); in kcpustat_field_vtime()
959 *val += vtime->gtime + vtime_delta(vtime); in kcpustat_field_vtime()
963 *val += vtime->gtime + vtime_delta(vtime); in kcpustat_field_vtime()
968 } while (read_seqcount_retry(&vtime->seqcount, seq)); in kcpustat_field_vtime()
1011 struct vtime *vtime = &tsk->vtime; in kcpustat_cpu_fetch_vtime() local
1019 seq = read_seqcount_begin(&vtime->seqcount); in kcpustat_cpu_fetch_vtime()
1021 state = vtime_state_fetch(vtime, cpu); in kcpustat_cpu_fetch_vtime()
1032 delta = vtime_delta(vtime); in kcpustat_cpu_fetch_vtime()
1039 cpustat[CPUTIME_SYSTEM] += vtime->stime + delta; in kcpustat_cpu_fetch_vtime()
1042 cpustat[CPUTIME_NICE] += vtime->utime + delta; in kcpustat_cpu_fetch_vtime()
1044 cpustat[CPUTIME_USER] += vtime->utime + delta; in kcpustat_cpu_fetch_vtime()
1048 cpustat[CPUTIME_GUEST_NICE] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1049 cpustat[CPUTIME_NICE] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1051 cpustat[CPUTIME_GUEST] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1052 cpustat[CPUTIME_USER] += vtime->gtime + delta; in kcpustat_cpu_fetch_vtime()
1055 } while (read_seqcount_retry(&vtime->seqcount, seq)); in kcpustat_cpu_fetch_vtime()