diff options
author | Supriya <ssharatkumar@nvidia.com> | 2014-07-24 04:44:32 -0400 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2015-03-18 15:10:36 -0400 |
commit | e34b945834c4fa0ca7aa50224e8d77fafa5fe7e3 (patch) | |
tree | efaf46994b3fa27a320392b2663e9f9e44a12744 /drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | |
parent | 44b9d5fdb090444534914a5c492a92d7ecefb0e7 (diff) |
nvgpu: new gpmu ucode compatibility
For LS PMU new ucode needs to be used.
Ucode has interface header file changes too.
This patch also has fixes for pmu dmem copy failure
Bug 1509680
Change-Id: I8c7018f889a82104dea590751e650e53e5524a54
Signed-off-by: Supriya <ssharatkumar@nvidia.com>
Reviewed-on: http://git-master/r/441734
Reviewed-by: Terje Bergstrom <tbergstrom@nvidia.com>
Tested-by: Terje Bergstrom <tbergstrom@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/gk20a/pmu_gk20a.c')
-rw-r--r-- | drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | 231 |
1 files changed, 221 insertions, 10 deletions
diff --git a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c index c23d83cf..b147c66f 100644 --- a/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c +++ b/drivers/gpu/nvgpu/gk20a/pmu_gk20a.c | |||
@@ -44,6 +44,76 @@ static void ap_callback_init_and_enable_ctrl( | |||
44 | struct gk20a *g, struct pmu_msg *msg, | 44 | struct gk20a *g, struct pmu_msg *msg, |
45 | void *param, u32 seq_desc, u32 status); | 45 | void *param, u32 seq_desc, u32 status); |
46 | 46 | ||
47 | static u32 pmu_perfmon_cntr_sz_v0(struct pmu_gk20a *pmu) | ||
48 | { | ||
49 | return sizeof(struct pmu_perfmon_counter_v0); | ||
50 | } | ||
51 | |||
52 | static u32 pmu_perfmon_cntr_sz_v2(struct pmu_gk20a *pmu) | ||
53 | { | ||
54 | return sizeof(struct pmu_perfmon_counter_v2); | ||
55 | } | ||
56 | |||
57 | static void *get_perfmon_cntr_ptr_v2(struct pmu_gk20a *pmu) | ||
58 | { | ||
59 | return (void *)(&pmu->perfmon_counter_v2); | ||
60 | } | ||
61 | |||
62 | static void *get_perfmon_cntr_ptr_v0(struct pmu_gk20a *pmu) | ||
63 | { | ||
64 | return (void *)(&pmu->perfmon_counter_v0); | ||
65 | } | ||
66 | |||
67 | static void set_perfmon_cntr_ut_v2(struct pmu_gk20a *pmu, u16 ut) | ||
68 | { | ||
69 | pmu->perfmon_counter_v2.upper_threshold = ut; | ||
70 | } | ||
71 | |||
72 | static void set_perfmon_cntr_ut_v0(struct pmu_gk20a *pmu, u16 ut) | ||
73 | { | ||
74 | pmu->perfmon_counter_v0.upper_threshold = ut; | ||
75 | } | ||
76 | |||
77 | static void set_perfmon_cntr_lt_v2(struct pmu_gk20a *pmu, u16 lt) | ||
78 | { | ||
79 | pmu->perfmon_counter_v2.lower_threshold = lt; | ||
80 | } | ||
81 | |||
82 | static void set_perfmon_cntr_lt_v0(struct pmu_gk20a *pmu, u16 lt) | ||
83 | { | ||
84 | pmu->perfmon_counter_v0.lower_threshold = lt; | ||
85 | } | ||
86 | |||
87 | static void set_perfmon_cntr_valid_v2(struct pmu_gk20a *pmu, u8 valid) | ||
88 | { | ||
89 | pmu->perfmon_counter_v2.valid = valid; | ||
90 | } | ||
91 | |||
92 | static void set_perfmon_cntr_valid_v0(struct pmu_gk20a *pmu, u8 valid) | ||
93 | { | ||
94 | pmu->perfmon_counter_v0.valid = valid; | ||
95 | } | ||
96 | |||
97 | static void set_perfmon_cntr_index_v2(struct pmu_gk20a *pmu, u8 index) | ||
98 | { | ||
99 | pmu->perfmon_counter_v2.index = index; | ||
100 | } | ||
101 | |||
102 | static void set_perfmon_cntr_index_v0(struct pmu_gk20a *pmu, u8 index) | ||
103 | { | ||
104 | pmu->perfmon_counter_v0.index = index; | ||
105 | } | ||
106 | |||
107 | static void set_perfmon_cntr_group_id_v2(struct pmu_gk20a *pmu, u8 gid) | ||
108 | { | ||
109 | pmu->perfmon_counter_v2.group_id = gid; | ||
110 | } | ||
111 | |||
112 | static void set_perfmon_cntr_group_id_v0(struct pmu_gk20a *pmu, u8 gid) | ||
113 | { | ||
114 | pmu->perfmon_counter_v0.group_id = gid; | ||
115 | } | ||
116 | |||
47 | static u32 pmu_cmdline_size_v0(struct pmu_gk20a *pmu) | 117 | static u32 pmu_cmdline_size_v0(struct pmu_gk20a *pmu) |
48 | { | 118 | { |
49 | return sizeof(struct pmu_cmdline_args_v0); | 119 | return sizeof(struct pmu_cmdline_args_v0); |
@@ -54,6 +124,37 @@ static u32 pmu_cmdline_size_v1(struct pmu_gk20a *pmu) | |||
54 | return sizeof(struct pmu_cmdline_args_v1); | 124 | return sizeof(struct pmu_cmdline_args_v1); |
55 | } | 125 | } |
56 | 126 | ||
127 | static u32 pmu_cmdline_size_v2(struct pmu_gk20a *pmu) | ||
128 | { | ||
129 | return sizeof(struct pmu_cmdline_args_v2); | ||
130 | } | ||
131 | |||
132 | static void set_pmu_cmdline_args_cpufreq_v2(struct pmu_gk20a *pmu, u32 freq) | ||
133 | { | ||
134 | pmu->args_v2.cpu_freq_hz = freq; | ||
135 | } | ||
136 | static void set_pmu_cmdline_args_secure_mode_v2(struct pmu_gk20a *pmu, u32 val) | ||
137 | { | ||
138 | pmu->args_v2.secure_mode = val; | ||
139 | } | ||
140 | |||
141 | static void set_pmu_cmdline_args_falctracesize_v2( | ||
142 | struct pmu_gk20a *pmu, u32 size) | ||
143 | { | ||
144 | pmu->args_v2.falc_trace_size = size; | ||
145 | } | ||
146 | |||
147 | static void set_pmu_cmdline_args_falctracedmabase_v2(struct pmu_gk20a *pmu) | ||
148 | { | ||
149 | pmu->args_v2.falc_trace_dma_base = ((u32)pmu->trace_buf.pmu_va)/0x100; | ||
150 | } | ||
151 | |||
152 | static void set_pmu_cmdline_args_falctracedmaidx_v2( | ||
153 | struct pmu_gk20a *pmu, u32 idx) | ||
154 | { | ||
155 | pmu->args_v2.falc_trace_dma_idx = idx; | ||
156 | } | ||
157 | |||
57 | static void set_pmu_cmdline_args_cpufreq_v1(struct pmu_gk20a *pmu, u32 freq) | 158 | static void set_pmu_cmdline_args_cpufreq_v1(struct pmu_gk20a *pmu, u32 freq) |
58 | { | 159 | { |
59 | pmu->args_v1.cpu_freq_hz = freq; | 160 | pmu->args_v1.cpu_freq_hz = freq; |
@@ -69,6 +170,7 @@ static void set_pmu_cmdline_args_falctracesize_v1( | |||
69 | pmu->args_v1.falc_trace_size = size; | 170 | pmu->args_v1.falc_trace_size = size; |
70 | } | 171 | } |
71 | 172 | ||
173 | |||
72 | void printtrace(struct pmu_gk20a *pmu) | 174 | void printtrace(struct pmu_gk20a *pmu) |
73 | { | 175 | { |
74 | u32 i = 0, j = 0; | 176 | u32 i = 0, j = 0; |
@@ -108,6 +210,11 @@ static void set_pmu_cmdline_args_cpufreq_v0(struct pmu_gk20a *pmu, u32 freq) | |||
108 | pmu->args_v0.cpu_freq_hz = freq; | 210 | pmu->args_v0.cpu_freq_hz = freq; |
109 | } | 211 | } |
110 | 212 | ||
213 | static void *get_pmu_cmdline_args_ptr_v2(struct pmu_gk20a *pmu) | ||
214 | { | ||
215 | return (void *)(&pmu->args_v2); | ||
216 | } | ||
217 | |||
111 | static void *get_pmu_cmdline_args_ptr_v1(struct pmu_gk20a *pmu) | 218 | static void *get_pmu_cmdline_args_ptr_v1(struct pmu_gk20a *pmu) |
112 | { | 219 | { |
113 | return (void *)(&pmu->args_v1); | 220 | return (void *)(&pmu->args_v1); |
@@ -525,6 +632,7 @@ static void *get_pmu_sequence_out_alloc_ptr_v0(struct pmu_sequence *seq) | |||
525 | int gk20a_init_pmu(struct pmu_gk20a *pmu) | 632 | int gk20a_init_pmu(struct pmu_gk20a *pmu) |
526 | { | 633 | { |
527 | struct gk20a *g = gk20a_from_pmu(pmu); | 634 | struct gk20a *g = gk20a_from_pmu(pmu); |
635 | struct pmu_v *pv = &g->ops.pmu_ver; | ||
528 | 636 | ||
529 | mutex_init(&pmu->elpg_mutex); | 637 | mutex_init(&pmu->elpg_mutex); |
530 | mutex_init(&pmu->isr_mutex); | 638 | mutex_init(&pmu->isr_mutex); |
@@ -532,17 +640,107 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu) | |||
532 | mutex_init(&pmu->pmu_copy_lock); | 640 | mutex_init(&pmu->pmu_copy_lock); |
533 | mutex_init(&pmu->pmu_seq_lock); | 641 | mutex_init(&pmu->pmu_seq_lock); |
534 | 642 | ||
535 | pmu->perfmon_counter.index = 3; /* GR & CE2 */ | ||
536 | pmu->perfmon_counter.group_id = PMU_DOMAIN_GROUP_PSTATE; | ||
537 | |||
538 | pmu->remove_support = gk20a_remove_pmu_support; | 643 | pmu->remove_support = gk20a_remove_pmu_support; |
539 | 644 | ||
540 | switch (pmu->desc->app_version) { | 645 | switch (pmu->desc->app_version) { |
646 | case APP_VERSION_GM20B_2: | ||
647 | g->ops.pmu_ver.get_perfmon_cntr_ptr = get_perfmon_cntr_ptr_v2; | ||
648 | g->ops.pmu_ver.set_perfmon_cntr_ut = set_perfmon_cntr_ut_v2; | ||
649 | g->ops.pmu_ver.set_perfmon_cntr_lt = set_perfmon_cntr_lt_v2; | ||
650 | g->ops.pmu_ver.set_perfmon_cntr_valid = | ||
651 | set_perfmon_cntr_valid_v2; | ||
652 | g->ops.pmu_ver.set_perfmon_cntr_index = | ||
653 | set_perfmon_cntr_index_v2; | ||
654 | g->ops.pmu_ver.set_perfmon_cntr_group_id = | ||
655 | set_perfmon_cntr_group_id_v2; | ||
656 | g->ops.pmu_ver.get_perfmon_cntr_sz = pmu_perfmon_cntr_sz_v2; | ||
657 | g->ops.pmu_ver.cmd_id_zbc_table_update = 16; | ||
658 | g->ops.pmu_ver.get_pmu_cmdline_args_size = | ||
659 | pmu_cmdline_size_v2; | ||
660 | g->ops.pmu_ver.set_pmu_cmdline_args_cpu_freq = | ||
661 | set_pmu_cmdline_args_cpufreq_v2; | ||
662 | g->ops.pmu_ver.set_pmu_cmdline_args_secure_mode = | ||
663 | set_pmu_cmdline_args_secure_mode_v2; | ||
664 | g->ops.pmu_ver.set_pmu_cmdline_args_trace_size = | ||
665 | set_pmu_cmdline_args_falctracesize_v2; | ||
666 | g->ops.pmu_ver.set_pmu_cmdline_args_trace_dma_base = | ||
667 | set_pmu_cmdline_args_falctracedmabase_v2; | ||
668 | g->ops.pmu_ver.set_pmu_cmdline_args_trace_dma_idx = | ||
669 | set_pmu_cmdline_args_falctracedmaidx_v2; | ||
670 | g->ops.pmu_ver.get_pmu_cmdline_args_ptr = | ||
671 | get_pmu_cmdline_args_ptr_v2; | ||
672 | g->ops.pmu_ver.get_pmu_allocation_struct_size = | ||
673 | get_pmu_allocation_size_v1; | ||
674 | g->ops.pmu_ver.set_pmu_allocation_ptr = | ||
675 | set_pmu_allocation_ptr_v1; | ||
676 | g->ops.pmu_ver.pmu_allocation_set_dmem_size = | ||
677 | pmu_allocation_set_dmem_size_v1; | ||
678 | g->ops.pmu_ver.pmu_allocation_get_dmem_size = | ||
679 | pmu_allocation_get_dmem_size_v1; | ||
680 | g->ops.pmu_ver.pmu_allocation_get_dmem_offset = | ||
681 | pmu_allocation_get_dmem_offset_v1; | ||
682 | g->ops.pmu_ver.pmu_allocation_get_dmem_offset_addr = | ||
683 | pmu_allocation_get_dmem_offset_addr_v1; | ||
684 | g->ops.pmu_ver.pmu_allocation_set_dmem_offset = | ||
685 | pmu_allocation_set_dmem_offset_v1; | ||
686 | g->ops.pmu_ver.get_pmu_init_msg_pmu_queue_params = | ||
687 | get_pmu_init_msg_pmu_queue_params_v1; | ||
688 | g->ops.pmu_ver.get_pmu_msg_pmu_init_msg_ptr = | ||
689 | get_pmu_msg_pmu_init_msg_ptr_v1; | ||
690 | g->ops.pmu_ver.get_pmu_init_msg_pmu_sw_mg_off = | ||
691 | get_pmu_init_msg_pmu_sw_mg_off_v1; | ||
692 | g->ops.pmu_ver.get_pmu_init_msg_pmu_sw_mg_size = | ||
693 | get_pmu_init_msg_pmu_sw_mg_size_v1; | ||
694 | g->ops.pmu_ver.get_pmu_perfmon_cmd_start_size = | ||
695 | get_pmu_perfmon_cmd_start_size_v1; | ||
696 | g->ops.pmu_ver.get_perfmon_cmd_start_offsetofvar = | ||
697 | get_perfmon_cmd_start_offsetofvar_v1; | ||
698 | g->ops.pmu_ver.perfmon_start_set_cmd_type = | ||
699 | perfmon_start_set_cmd_type_v1; | ||
700 | g->ops.pmu_ver.perfmon_start_set_group_id = | ||
701 | perfmon_start_set_group_id_v1; | ||
702 | g->ops.pmu_ver.perfmon_start_set_state_id = | ||
703 | perfmon_start_set_state_id_v1; | ||
704 | g->ops.pmu_ver.perfmon_start_set_flags = | ||
705 | perfmon_start_set_flags_v1; | ||
706 | g->ops.pmu_ver.perfmon_start_get_flags = | ||
707 | perfmon_start_get_flags_v1; | ||
708 | g->ops.pmu_ver.get_pmu_perfmon_cmd_init_size = | ||
709 | get_pmu_perfmon_cmd_init_size_v1; | ||
710 | g->ops.pmu_ver.get_perfmon_cmd_init_offsetofvar = | ||
711 | get_perfmon_cmd_init_offsetofvar_v1; | ||
712 | g->ops.pmu_ver.perfmon_cmd_init_set_sample_buffer = | ||
713 | perfmon_cmd_init_set_sample_buffer_v1; | ||
714 | g->ops.pmu_ver.perfmon_cmd_init_set_dec_cnt = | ||
715 | perfmon_cmd_init_set_dec_cnt_v1; | ||
716 | g->ops.pmu_ver.perfmon_cmd_init_set_base_cnt_id = | ||
717 | perfmon_cmd_init_set_base_cnt_id_v1; | ||
718 | g->ops.pmu_ver.perfmon_cmd_init_set_samp_period_us = | ||
719 | perfmon_cmd_init_set_samp_period_us_v1; | ||
720 | g->ops.pmu_ver.perfmon_cmd_init_set_num_cnt = | ||
721 | perfmon_cmd_init_set_num_cnt_v1; | ||
722 | g->ops.pmu_ver.perfmon_cmd_init_set_mov_avg = | ||
723 | perfmon_cmd_init_set_mov_avg_v1; | ||
724 | g->ops.pmu_ver.get_pmu_seq_in_a_ptr = | ||
725 | get_pmu_sequence_in_alloc_ptr_v1; | ||
726 | g->ops.pmu_ver.get_pmu_seq_out_a_ptr = | ||
727 | get_pmu_sequence_out_alloc_ptr_v1; | ||
728 | break; | ||
541 | case APP_VERSION_GM20B_1: | 729 | case APP_VERSION_GM20B_1: |
542 | case APP_VERSION_GM20B: | 730 | case APP_VERSION_GM20B: |
543 | case APP_VERSION_1: | 731 | case APP_VERSION_1: |
544 | case APP_VERSION_2: | 732 | case APP_VERSION_2: |
545 | g->ops.pmu_ver.cmd_id_zbc_table_update = 16; | 733 | g->ops.pmu_ver.cmd_id_zbc_table_update = 16; |
734 | g->ops.pmu_ver.get_perfmon_cntr_ptr = get_perfmon_cntr_ptr_v0; | ||
735 | g->ops.pmu_ver.set_perfmon_cntr_ut = set_perfmon_cntr_ut_v0; | ||
736 | g->ops.pmu_ver.set_perfmon_cntr_lt = set_perfmon_cntr_lt_v0; | ||
737 | g->ops.pmu_ver.set_perfmon_cntr_valid = | ||
738 | set_perfmon_cntr_valid_v0; | ||
739 | g->ops.pmu_ver.set_perfmon_cntr_index = | ||
740 | set_perfmon_cntr_index_v0; | ||
741 | g->ops.pmu_ver.set_perfmon_cntr_group_id = | ||
742 | set_perfmon_cntr_group_id_v0; | ||
743 | g->ops.pmu_ver.get_perfmon_cntr_sz = pmu_perfmon_cntr_sz_v0; | ||
546 | g->ops.pmu_ver.get_pmu_cmdline_args_size = | 744 | g->ops.pmu_ver.get_pmu_cmdline_args_size = |
547 | pmu_cmdline_size_v1; | 745 | pmu_cmdline_size_v1; |
548 | g->ops.pmu_ver.set_pmu_cmdline_args_cpu_freq = | 746 | g->ops.pmu_ver.set_pmu_cmdline_args_cpu_freq = |
@@ -616,6 +814,16 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu) | |||
616 | break; | 814 | break; |
617 | case APP_VERSION_0: | 815 | case APP_VERSION_0: |
618 | g->ops.pmu_ver.cmd_id_zbc_table_update = 14; | 816 | g->ops.pmu_ver.cmd_id_zbc_table_update = 14; |
817 | g->ops.pmu_ver.get_perfmon_cntr_ptr = get_perfmon_cntr_ptr_v0; | ||
818 | g->ops.pmu_ver.set_perfmon_cntr_ut = set_perfmon_cntr_ut_v0; | ||
819 | g->ops.pmu_ver.set_perfmon_cntr_lt = set_perfmon_cntr_lt_v0; | ||
820 | g->ops.pmu_ver.set_perfmon_cntr_valid = | ||
821 | set_perfmon_cntr_valid_v0; | ||
822 | g->ops.pmu_ver.set_perfmon_cntr_index = | ||
823 | set_perfmon_cntr_index_v0; | ||
824 | g->ops.pmu_ver.set_perfmon_cntr_group_id = | ||
825 | set_perfmon_cntr_group_id_v0; | ||
826 | g->ops.pmu_ver.get_perfmon_cntr_sz = pmu_perfmon_cntr_sz_v0; | ||
619 | g->ops.pmu_ver.get_pmu_cmdline_args_size = | 827 | g->ops.pmu_ver.get_pmu_cmdline_args_size = |
620 | pmu_cmdline_size_v0; | 828 | pmu_cmdline_size_v0; |
621 | g->ops.pmu_ver.set_pmu_cmdline_args_cpu_freq = | 829 | g->ops.pmu_ver.set_pmu_cmdline_args_cpu_freq = |
@@ -688,6 +896,9 @@ int gk20a_init_pmu(struct pmu_gk20a *pmu) | |||
688 | return -EINVAL; | 896 | return -EINVAL; |
689 | break; | 897 | break; |
690 | } | 898 | } |
899 | pv->set_perfmon_cntr_index(pmu, 3); /* GR & CE2 */ | ||
900 | pv->set_perfmon_cntr_group_id(pmu, PMU_DOMAIN_GROUP_PSTATE); | ||
901 | |||
691 | return 0; | 902 | return 0; |
692 | } | 903 | } |
693 | 904 | ||
@@ -2336,8 +2547,8 @@ static int pmu_init_perfmon(struct pmu_gk20a *pmu) | |||
2336 | pv->perfmon_cmd_init_set_mov_avg(&cmd.cmd.perfmon, 17); | 2547 | pv->perfmon_cmd_init_set_mov_avg(&cmd.cmd.perfmon, 17); |
2337 | 2548 | ||
2338 | memset(&payload, 0, sizeof(struct pmu_payload)); | 2549 | memset(&payload, 0, sizeof(struct pmu_payload)); |
2339 | payload.in.buf = &pmu->perfmon_counter; | 2550 | payload.in.buf = pv->get_perfmon_cntr_ptr(pmu); |
2340 | payload.in.size = sizeof(struct pmu_perfmon_counter); | 2551 | payload.in.size = pv->get_perfmon_cntr_sz(pmu); |
2341 | payload.in.offset = pv->get_perfmon_cmd_init_offsetofvar(COUNTER_ALLOC); | 2552 | payload.in.offset = pv->get_perfmon_cmd_init_offsetofvar(COUNTER_ALLOC); |
2342 | 2553 | ||
2343 | gk20a_dbg_pmu("cmd post PMU_PERFMON_CMD_ID_INIT"); | 2554 | gk20a_dbg_pmu("cmd post PMU_PERFMON_CMD_ID_INIT"); |
@@ -2631,13 +2842,13 @@ static int pmu_perfmon_start_sampling(struct pmu_gk20a *pmu) | |||
2631 | memset(&payload, 0, sizeof(struct pmu_payload)); | 2842 | memset(&payload, 0, sizeof(struct pmu_payload)); |
2632 | 2843 | ||
2633 | /* TBD: PMU_PERFMON_PCT_TO_INC * 100 */ | 2844 | /* TBD: PMU_PERFMON_PCT_TO_INC * 100 */ |
2634 | pmu->perfmon_counter.upper_threshold = 3000; /* 30% */ | 2845 | pv->set_perfmon_cntr_ut(pmu, 3000); /* 30% */ |
2635 | /* TBD: PMU_PERFMON_PCT_TO_DEC * 100 */ | 2846 | /* TBD: PMU_PERFMON_PCT_TO_DEC * 100 */ |
2636 | pmu->perfmon_counter.lower_threshold = 1000; /* 10% */ | 2847 | pv->set_perfmon_cntr_lt(pmu, 1000); /* 10% */ |
2637 | pmu->perfmon_counter.valid = true; | 2848 | pv->set_perfmon_cntr_valid(pmu, true); |
2638 | 2849 | ||
2639 | payload.in.buf = &pmu->perfmon_counter; | 2850 | payload.in.buf = pv->get_perfmon_cntr_ptr(pmu); |
2640 | payload.in.size = sizeof(pmu->perfmon_counter); | 2851 | payload.in.size = pv->get_perfmon_cntr_sz(pmu); |
2641 | payload.in.offset = | 2852 | payload.in.offset = |
2642 | pv->get_perfmon_cmd_start_offsetofvar(COUNTER_ALLOC); | 2853 | pv->get_perfmon_cmd_start_offsetofvar(COUNTER_ALLOC); |
2643 | 2854 | ||