Commit 97bf2640184f4fb2b2bf2c58ae3112768a6174fa

Authored by Cody P Schafer
Committed by Michael Ellerman
1 parent 9e9f601084

powerpc/perf/hv-gpci: add the remaining gpci requests

Add the remaining gpci requests that contain counters suitable for use
by perf. Omit those that don't contain any counters (but note their
ommision).

Signed-off-by: Cody P Schafer <cody@linux.vnet.ibm.com>
Signed-off-by: Sukadev Bhattiprolu <sukadev@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Showing 1 changed file with 186 additions and 1 deletions Side-by-side Diff

arch/powerpc/perf/hv-gpci-requests.h
... ... @@ -20,7 +20,9 @@
20 20 *
21 21 * - starting_index_kind is one of the following, depending on the event:
22 22 *
23   - * chip_id: hardware chip id or -1 for current hw chip
  23 + * hw_chip_id: hardware chip id or -1 for current hw chip
  24 + * partition_id
  25 + * sibling_part_id,
24 26 * phys_processor_idx:
25 27 * 0xffffffffffffffff: or -1, which means it is irrelavant for the event
26 28 *
... ... @@ -63,6 +65,33 @@
63 65 )
64 66 #include I(REQUEST_END)
65 67  
  68 +#define REQUEST_NAME entitled_capped_uncapped_donated_idle_timebase_by_partition
  69 +#define REQUEST_NUM 0x20
  70 +#define REQUEST_IDX_KIND "sibling_part_id=?"
  71 +#include I(REQUEST_BEGIN)
  72 +REQUEST(__field(0, 8, partition_id)
  73 + __count(0x8, 8, entitled_cycles)
  74 + __count(0x10, 8, consumed_capped_cycles)
  75 + __count(0x18, 8, consumed_uncapped_cycles)
  76 + __count(0x20, 8, cycles_donated)
  77 + __count(0x28, 8, purr_idle_cycles)
  78 +)
  79 +#include I(REQUEST_END)
  80 +
  81 +/*
  82 + * Not available for counter_info_version >= 0x8, use
  83 + * run_instruction_cycles_by_partition(0x100) instead.
  84 + */
  85 +#define REQUEST_NAME run_instructions_run_cycles_by_partition
  86 +#define REQUEST_NUM 0x30
  87 +#define REQUEST_IDX_KIND "sibling_part_id=?"
  88 +#include I(REQUEST_BEGIN)
  89 +REQUEST(__field(0, 8, partition_id)
  90 + __count(0x8, 8, instructions_completed)
  91 + __count(0x10, 8, cycles)
  92 +)
  93 +#include I(REQUEST_END)
  94 +
66 95 #define REQUEST_NAME system_performance_capabilities
67 96 #define REQUEST_NUM 0x40
68 97 #define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
... ... @@ -72,6 +101,162 @@
72 101 __array(0x2, 0xE, reserved)
73 102 )
74 103 #include I(REQUEST_END)
  104 +
  105 +#define REQUEST_NAME processor_bus_utilization_abc_links
  106 +#define REQUEST_NUM 0x50
  107 +#define REQUEST_IDX_KIND "hw_chip_id=?"
  108 +#include I(REQUEST_BEGIN)
  109 +REQUEST(__field(0, 4, hw_chip_id)
  110 + __array(0x4, 0xC, reserved1)
  111 + __count(0x10, 8, total_link_cycles)
  112 + __count(0x18, 8, idle_cycles_for_a_link)
  113 + __count(0x20, 8, idle_cycles_for_b_link)
  114 + __count(0x28, 8, idle_cycles_for_c_link)
  115 + __array(0x30, 0x20, reserved2)
  116 +)
  117 +#include I(REQUEST_END)
  118 +
  119 +#define REQUEST_NAME processor_bus_utilization_wxyz_links
  120 +#define REQUEST_NUM 0x60
  121 +#define REQUEST_IDX_KIND "hw_chip_id=?"
  122 +#include I(REQUEST_BEGIN)
  123 +REQUEST(__field(0, 4, hw_chip_id)
  124 + __array(0x4, 0xC, reserved1)
  125 + __count(0x10, 8, total_link_cycles)
  126 + __count(0x18, 8, idle_cycles_for_w_link)
  127 + __count(0x20, 8, idle_cycles_for_x_link)
  128 + __count(0x28, 8, idle_cycles_for_y_link)
  129 + __count(0x30, 8, idle_cycles_for_z_link)
  130 + __array(0x38, 0x28, reserved2)
  131 +)
  132 +#include I(REQUEST_END)
  133 +
  134 +#define REQUEST_NAME processor_bus_utilization_gx_links
  135 +#define REQUEST_NUM 0x70
  136 +#define REQUEST_IDX_KIND "hw_chip_id=?"
  137 +#include I(REQUEST_BEGIN)
  138 +REQUEST(__field(0, 4, hw_chip_id)
  139 + __array(0x4, 0xC, reserved1)
  140 + __count(0x10, 8, gx0_in_address_cycles)
  141 + __count(0x18, 8, gx0_in_data_cycles)
  142 + __count(0x20, 8, gx0_in_retries)
  143 + __count(0x28, 8, gx0_in_bus_cycles)
  144 + __count(0x30, 8, gx0_in_cycles_total)
  145 + __count(0x38, 8, gx0_out_address_cycles)
  146 + __count(0x40, 8, gx0_out_data_cycles)
  147 + __count(0x48, 8, gx0_out_retries)
  148 + __count(0x50, 8, gx0_out_bus_cycles)
  149 + __count(0x58, 8, gx0_out_cycles_total)
  150 + __count(0x60, 8, gx1_in_address_cycles)
  151 + __count(0x68, 8, gx1_in_data_cycles)
  152 + __count(0x70, 8, gx1_in_retries)
  153 + __count(0x78, 8, gx1_in_bus_cycles)
  154 + __count(0x80, 8, gx1_in_cycles_total)
  155 + __count(0x88, 8, gx1_out_address_cycles)
  156 + __count(0x90, 8, gx1_out_data_cycles)
  157 + __count(0x98, 8, gx1_out_retries)
  158 + __count(0xA0, 8, gx1_out_bus_cycles)
  159 + __count(0xA8, 8, gx1_out_cycles_total)
  160 +)
  161 +#include I(REQUEST_END)
  162 +
  163 +#define REQUEST_NAME processor_bus_utilization_mc_links
  164 +#define REQUEST_NUM 0x80
  165 +#define REQUEST_IDX_KIND "hw_chip_id=?"
  166 +#include I(REQUEST_BEGIN)
  167 +REQUEST(__field(0, 4, hw_chip_id)
  168 + __array(0x4, 0xC, reserved1)
  169 + __count(0x10, 8, mc0_frames)
  170 + __count(0x18, 8, mc0_reads)
  171 + __count(0x20, 8, mc0_write)
  172 + __count(0x28, 8, mc0_total_cycles)
  173 + __count(0x30, 8, mc1_frames)
  174 + __count(0x38, 8, mc1_reads)
  175 + __count(0x40, 8, mc1_writes)
  176 + __count(0x48, 8, mc1_total_cycles)
  177 +)
  178 +#include I(REQUEST_END)
  179 +
  180 +/* Processor_config (0x90) skipped, no counters */
  181 +/* Current_processor_frequency (0x91) skipped, no counters */
  182 +
  183 +#define REQUEST_NAME processor_core_utilization
  184 +#define REQUEST_NUM 0x94
  185 +#define REQUEST_IDX_KIND "phys_processor_idx=?"
  186 +#include I(REQUEST_BEGIN)
  187 +REQUEST(__field(0, 4, phys_processor_idx)
  188 + __field(0x4, 4, hw_processor_id)
  189 + __count(0x8, 8, cycles_across_any_thread)
  190 + __count(0x10, 8, timebase_at_collection)
  191 + __count(0x18, 8, purr_cycles)
  192 + __count(0x20, 8, sum_of_cycles_across_all_threads)
  193 + __count(0x28, 8, instructions_completed)
  194 +)
  195 +#include I(REQUEST_END)
  196 +
  197 +/* Processor_core_power_mode (0x95) skipped, no counters */
  198 +/* Affinity_domain_information_by_virtual_processor (0xA0) skipped,
  199 + * no counters */
  200 +/* Affinity_domain_information_by_domain (0xB0) skipped, no counters */
  201 +/* Affinity_domain_information_by_partition (0xB1) skipped, no counters */
  202 +/* Physical_memory_info (0xC0) skipped, no counters */
  203 +/* Processor_bus_topology (0xD0) skipped, no counters */
  204 +
  205 +#define REQUEST_NAME partition_hypervisor_queuing_times
  206 +#define REQUEST_NUM 0xE0
  207 +#define REQUEST_IDX_KIND "partition_id=?"
  208 +#include I(REQUEST_BEGIN)
  209 +REQUEST(__field(0, 2, partition_id)
  210 + __array(0x2, 6, reserved1)
  211 + __count(0x8, 8, time_waiting_for_entitlement)
  212 + __count(0x10, 8, times_waited_for_entitlement)
  213 + __count(0x18, 8, time_waiting_for_phys_processor)
  214 + __count(0x20, 8, times_waited_for_phys_processor)
  215 + __count(0x28, 8, dispatches_on_home_core)
  216 + __count(0x30, 8, dispatches_on_home_primary_affinity_domain)
  217 + __count(0x38, 8, dispatches_on_home_secondary_affinity_domain)
  218 + __count(0x40, 8, dispatches_off_home_secondary_affinity_domain)
  219 + __count(0x48, 8, dispatches_on_dedicated_processor_donating_cycles)
  220 +)
  221 +#include I(REQUEST_END)
  222 +
  223 +#define REQUEST_NAME system_hypervisor_times
  224 +#define REQUEST_NUM 0xF0
  225 +#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
  226 +#include I(REQUEST_BEGIN)
  227 +REQUEST(__count(0, 8, time_spent_to_dispatch_virtual_processors)
  228 + __count(0x8, 8, time_spent_processing_virtual_processor_timers)
  229 + __count(0x10, 8, time_spent_managing_partitions_over_entitlement)
  230 + __count(0x18, 8, time_spent_on_system_management)
  231 +)
  232 +#include I(REQUEST_END)
  233 +
  234 +#define REQUEST_NAME system_tlbie_count_and_time
  235 +#define REQUEST_NUM 0xF4
  236 +#define REQUEST_IDX_KIND "starting_index=0xffffffffffffffff"
  237 +#include I(REQUEST_BEGIN)
  238 +REQUEST(__count(0, 8, tlbie_instructions_issued)
  239 + /*
  240 + * FIXME: The spec says the offset here is 0x10, which I suspect
  241 + * is wrong.
  242 + */
  243 + __count(0x8, 8, time_spent_issuing_tlbies)
  244 +)
  245 +#include I(REQUEST_END)
  246 +
  247 +#define REQUEST_NAME partition_instruction_count_and_time
  248 +#define REQUEST_NUM 0x100
  249 +#define REQUEST_IDX_KIND "partition_id=?"
  250 +#include I(REQUEST_BEGIN)
  251 +REQUEST(__field(0, 2, partition_id)
  252 + __array(0x2, 0x6, reserved1)
  253 + __count(0x8, 8, instructions_performed)
  254 + __count(0x10, 8, time_collected)
  255 +)
  256 +#include I(REQUEST_END)
  257 +
  258 +/* set_mmcrh (0x80001000) skipped, no counters */
  259 +/* retrieve_hpmcx (0x80002000) skipped, no counters */
75 260  
76 261 #include "req-gen/_end.h"