Changeset 1433ecda in mainline for kernel/arch/sparc64/src/smp
- Timestamp:
- 2018-04-04T15:42:37Z (8 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 2c4e1cc
- Parents:
- 47b2d7e3
- Location:
- kernel/arch/sparc64/src/smp
- Files:
-
- 4 edited
-
sun4u/ipi.c (modified) (3 diffs)
-
sun4u/smp.c (modified) (1 diff)
-
sun4v/ipi.c (modified) (5 diffs)
-
sun4v/smp.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/sparc64/src/smp/sun4u/ipi.c
r47b2d7e3 r1433ecda 59 59 * @param func value the first data item of the vector will be set to 60 60 */ 61 static inline void set_intr_w_data(void (* func)(void))61 static inline void set_intr_w_data(void (*func)(void)) 62 62 { 63 63 #if defined (US) … … 87 87 * @param func Function to be invoked. 88 88 */ 89 static void cross_call(int mid, void (* func)(void))89 static void cross_call(int mid, void (*func)(void)) 90 90 { 91 91 uint64_t status; … … 148 148 unsigned int i; 149 149 150 void (* func)(void);150 void (*func)(void); 151 151 152 152 switch (ipi) { -
kernel/arch/sparc64/src/smp/sun4u/smp.c
r47b2d7e3 r1433ecda 121 121 node = ofw_tree_find_child_by_device_type(cpus_parent(), "cpu"); 122 122 for (i = 0; node; 123 node = ofw_tree_find_peer_by_device_type(node, "cpu"), i++)123 node = ofw_tree_find_peer_by_device_type(node, "cpu"), i++) 124 124 wakeup_cpu(node); 125 125 } else if (is_us_iv()) { -
kernel/arch/sparc64/src/smp/sun4v/ipi.c
r47b2d7e3 r1433ecda 45 45 46 46 static uint64_t data[MAX_NUM_STRANDS][IPI_MESSAGE_SIZE] 47 __attribute__ ((aligned(64)));47 __attribute__((aligned(64))); 48 48 49 49 static uint16_t ipi_cpu_list[MAX_NUM_STRANDS][MAX_NUM_STRANDS]; … … 60 60 */ 61 61 uint64_t ipi_brodcast_to(void (*func)(void), uint16_t cpu_list[MAX_NUM_STRANDS], 62 uint64_t list_size) { 62 uint64_t list_size) 63 { 63 64 64 65 data[CPU->arch.id][0] = (uint64_t) func; … … 70 71 71 72 return __hypercall_fast3(CPU_MONDO_SEND, list_size, 72 KA2PA(ipi_cpu_list[CPU->arch.id]), KA2PA(data[CPU->arch.id]));73 KA2PA(ipi_cpu_list[CPU->arch.id]), KA2PA(data[CPU->arch.id])); 73 74 } 74 75 … … 81 82 * @return error code returned by the CPU_MONDO_SEND hypercall 82 83 */ 83 uint64_t ipi_unicast_to(void (*func)(void), uint16_t cpu_id) { 84 uint64_t ipi_unicast_to(void (*func)(void), uint16_t cpu_id) 85 { 84 86 ipi_cpu_list[CPU->arch.id][0] = cpu_id; 85 87 return ipi_brodcast_to(func, ipi_cpu_list[CPU->arch.id], 1); … … 95 97 void ipi_broadcast_arch(int ipi) 96 98 { 97 void (* func)(void);99 void (*func)(void); 98 100 99 101 switch (ipi) { -
kernel/arch/sparc64/src/smp/sun4v/smp.c
r47b2d7e3 r1433ecda 88 88 * stored to the proposed_nrdy variable of the cpu_arch_t struture. 89 89 */ 90 bool calculate_optimal_nrdy(exec_unit_t *exec_unit) { 90 bool calculate_optimal_nrdy(exec_unit_t *exec_unit) 91 { 91 92 92 93 /* calculate the number of threads the core will steal */ … … 103 104 for (k = 0; k < exec_unit->strand_count; k++) { 104 105 exec_units->cpus[k]->arch.proposed_nrdy = 105 atomic_get(&(exec_unit->cpus[k]->nrdy));106 atomic_get(&(exec_unit->cpus[k]->nrdy)); 106 107 } 107 108 … … 112 113 unsigned int least_busy = 0; 113 114 unsigned int least_busy_nrdy = 114 exec_unit->cpus[0]->arch.proposed_nrdy;115 exec_unit->cpus[0]->arch.proposed_nrdy; 115 116 116 117 /* for each stolen thread, give it to the least busy CPU */ 117 118 for (k = 0; k < exec_unit->strand_count; k++) { 118 if (exec_unit->cpus[k]->arch.proposed_nrdy 119 < least_busy_nrdy) { 119 if (exec_unit->cpus[k]->arch.proposed_nrdy < least_busy_nrdy) { 120 120 least_busy = k; 121 121 least_busy_nrdy = 122 exec_unit->cpus[k]->arch.proposed_nrdy;122 exec_unit->cpus[k]->arch.proposed_nrdy; 123 123 } 124 124 } … … 247 247 exec_units[i].strand_count++; 248 248 max_core_strands = 249 exec_units[i].strand_count > max_core_strands ?250 exec_units[i].strand_count : max_core_strands;249 exec_units[i].strand_count > max_core_strands ? 250 exec_units[i].strand_count : max_core_strands; 251 251 252 252 /* detecting execution unit failed */
Note:
See TracChangeset
for help on using the changeset viewer.
