Home
last modified time | relevance | path

Searched full:cluster (Results 1 – 25 of 1140) sorted by relevance

12345678910>>...46

/kernel/linux/linux-5.10/kernel/sched/
Dcore_ctl.c60 struct cluster_data *cluster; member
69 #define for_each_cluster(cluster, idx) \ argument
70 for (; (idx) < num_clusters && ((cluster) = &cluster_state[idx]);\
81 static unsigned int get_active_cpu_count(const struct cluster_data *cluster);
161 struct cluster_data *cluster; in show_global_state() local
168 cluster = c->cluster; in show_global_state()
169 if (!cluster || !cluster->inited) in show_global_state()
184 cluster->first_cpu); in show_global_state()
193 "\tNr running: %u\n", cluster->nrrun); in show_global_state()
195 "\tActive CPUs: %u\n", get_active_cpu_count(cluster)); in show_global_state()
[all …]
/kernel/linux/linux-5.10/arch/arm/common/
Dmcpm_entry.c3 * arch/arm/common/mcpm_entry.c -- entry point for multi-cluster PM
24 * see Documentation/arm/cluster-pm-race-avoidance.rst.
34 static void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster) in __mcpm_cpu_going_down() argument
36 mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_GOING_DOWN; in __mcpm_cpu_going_down()
37 sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); in __mcpm_cpu_going_down()
42 * cluster can be torn down without disrupting this CPU.
47 static void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster) in __mcpm_cpu_down() argument
50 mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_DOWN; in __mcpm_cpu_down()
51 sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); in __mcpm_cpu_down()
56 * __mcpm_outbound_leave_critical: Leave the cluster teardown critical section.
[all …]
/kernel/linux/linux-4.19/arch/arm/common/
Dmcpm_entry.c2 * arch/arm/common/mcpm_entry.c -- entry point for multi-cluster PM
27 * see Documentation/arm/cluster-pm-race-avoidance.txt.
37 static void __mcpm_cpu_going_down(unsigned int cpu, unsigned int cluster) in __mcpm_cpu_going_down() argument
39 mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_GOING_DOWN; in __mcpm_cpu_going_down()
40 sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); in __mcpm_cpu_going_down()
45 * cluster can be torn down without disrupting this CPU.
50 static void __mcpm_cpu_down(unsigned int cpu, unsigned int cluster) in __mcpm_cpu_down() argument
53 mcpm_sync.clusters[cluster].cpus[cpu].cpu = CPU_DOWN; in __mcpm_cpu_down()
54 sync_cache_w(&mcpm_sync.clusters[cluster].cpus[cpu].cpu); in __mcpm_cpu_down()
59 * __mcpm_outbound_leave_critical: Leave the cluster teardown critical section.
[all …]
/kernel/linux/linux-4.19/arch/arm/mach-sunxi/
Dmc_smp.c11 * Cluster cache enable trampoline code adapted from MCPM framework
88 static bool sunxi_core_is_cortex_a15(unsigned int core, unsigned int cluster) in sunxi_core_is_cortex_a15() argument
91 int cpu = cluster * SUNXI_CPUS_PER_CLUSTER + core; in sunxi_core_is_cortex_a15()
102 * would be mid way in a core or cluster power sequence. in sunxi_core_is_cortex_a15()
104 pr_err("%s: Couldn't get CPU cluster %u core %u device node\n", in sunxi_core_is_cortex_a15()
105 __func__, cluster, core); in sunxi_core_is_cortex_a15()
113 static int sunxi_cpu_power_switch_set(unsigned int cpu, unsigned int cluster, in sunxi_cpu_power_switch_set() argument
119 reg = readl(prcm_base + PRCM_PWR_SWITCH_REG(cluster, cpu)); in sunxi_cpu_power_switch_set()
122 pr_debug("power clamp for cluster %u cpu %u already open\n", in sunxi_cpu_power_switch_set()
123 cluster, cpu); in sunxi_cpu_power_switch_set()
[all …]
/kernel/linux/linux-5.10/arch/arm/mach-sunxi/
Dmc_smp.c11 * Cluster cache enable trampoline code adapted from MCPM framework
88 static bool sunxi_core_is_cortex_a15(unsigned int core, unsigned int cluster) in sunxi_core_is_cortex_a15() argument
91 int cpu = cluster * SUNXI_CPUS_PER_CLUSTER + core; in sunxi_core_is_cortex_a15()
103 * would be mid way in a core or cluster power sequence. in sunxi_core_is_cortex_a15()
105 pr_err("%s: Couldn't get CPU cluster %u core %u device node\n", in sunxi_core_is_cortex_a15()
106 __func__, cluster, core); in sunxi_core_is_cortex_a15()
116 static int sunxi_cpu_power_switch_set(unsigned int cpu, unsigned int cluster, in sunxi_cpu_power_switch_set() argument
122 reg = readl(prcm_base + PRCM_PWR_SWITCH_REG(cluster, cpu)); in sunxi_cpu_power_switch_set()
125 pr_debug("power clamp for cluster %u cpu %u already open\n", in sunxi_cpu_power_switch_set()
126 cluster, cpu); in sunxi_cpu_power_switch_set()
[all …]
/kernel/linux/linux-4.19/Documentation/arm/
Dcluster-pm-race-avoidance.txt1 Cluster-wide Power-up/power-down race avoidance algorithm
5 cluster setup and teardown operations and to manage hardware coherency
28 cluster-level operations are only performed when it is truly safe to do
33 are not immediately enabled when a cluster powers up. Since enabling or
37 power-down and power-up at the cluster level.
47 Each cluster and CPU is assigned a state, as follows:
63 DOWN: The CPU or cluster is not coherent, and is either powered off or
66 COMING_UP: The CPU or cluster has committed to moving to the UP state.
70 UP: The CPU or cluster is active and coherent at the hardware
74 GOING_DOWN: The CPU or cluster has committed to moving to the DOWN
[all …]
/kernel/linux/linux-5.10/arch/arm/mach-vexpress/
Dtc2_pm.c48 static int tc2_pm_cpu_powerup(unsigned int cpu, unsigned int cluster) in tc2_pm_cpu_powerup() argument
50 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in tc2_pm_cpu_powerup()
51 if (cluster >= TC2_CLUSTERS || cpu >= tc2_nr_cpus[cluster]) in tc2_pm_cpu_powerup()
53 ve_spc_set_resume_addr(cluster, cpu, in tc2_pm_cpu_powerup()
55 ve_spc_cpu_wakeup_irq(cluster, cpu, true); in tc2_pm_cpu_powerup()
59 static int tc2_pm_cluster_powerup(unsigned int cluster) in tc2_pm_cluster_powerup() argument
61 pr_debug("%s: cluster %u\n", __func__, cluster); in tc2_pm_cluster_powerup()
62 if (cluster >= TC2_CLUSTERS) in tc2_pm_cluster_powerup()
64 ve_spc_powerdown(cluster, false); in tc2_pm_cluster_powerup()
68 static void tc2_pm_cpu_powerdown_prepare(unsigned int cpu, unsigned int cluster) in tc2_pm_cpu_powerdown_prepare() argument
[all …]
Ddcscb.c3 * arch/arm/mach-vexpress/dcscb.c - Dual Cluster System Configuration Block
39 static int dcscb_cpu_powerup(unsigned int cpu, unsigned int cluster) in dcscb_cpu_powerup() argument
43 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in dcscb_cpu_powerup()
44 if (cluster >= 2 || !(cpumask & dcscb_allcpus_mask[cluster])) in dcscb_cpu_powerup()
47 rst_hold = readl_relaxed(dcscb_base + RST_HOLD0 + cluster * 4); in dcscb_cpu_powerup()
49 writel_relaxed(rst_hold, dcscb_base + RST_HOLD0 + cluster * 4); in dcscb_cpu_powerup()
53 static int dcscb_cluster_powerup(unsigned int cluster) in dcscb_cluster_powerup() argument
57 pr_debug("%s: cluster %u\n", __func__, cluster); in dcscb_cluster_powerup()
58 if (cluster >= 2) in dcscb_cluster_powerup()
61 /* remove cluster reset and add individual CPU's reset */ in dcscb_cluster_powerup()
[all …]
Dspc.c58 /* SPC CPU/cluster reset statue */
79 /* TC2 static dual-cluster configuration */
105 * A15s cluster identifier
119 static inline bool cluster_is_a15(u32 cluster) in cluster_is_a15() argument
121 return cluster == info->a15_clusid; in cluster_is_a15()
154 * @cluster: mpidr[15:8] bitfield describing cluster affinity level
158 void ve_spc_cpu_wakeup_irq(u32 cluster, u32 cpu, bool set) in ve_spc_cpu_wakeup_irq() argument
162 if (cluster >= MAX_CLUSTERS) in ve_spc_cpu_wakeup_irq()
167 if (!cluster_is_a15(cluster)) in ve_spc_cpu_wakeup_irq()
183 * @cluster: mpidr[15:8] bitfield describing cluster affinity level
[all …]
/kernel/linux/linux-4.19/arch/arm/mach-vexpress/
Dtc2_pm.c51 static int tc2_pm_cpu_powerup(unsigned int cpu, unsigned int cluster) in tc2_pm_cpu_powerup() argument
53 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in tc2_pm_cpu_powerup()
54 if (cluster >= TC2_CLUSTERS || cpu >= tc2_nr_cpus[cluster]) in tc2_pm_cpu_powerup()
56 ve_spc_set_resume_addr(cluster, cpu, in tc2_pm_cpu_powerup()
58 ve_spc_cpu_wakeup_irq(cluster, cpu, true); in tc2_pm_cpu_powerup()
62 static int tc2_pm_cluster_powerup(unsigned int cluster) in tc2_pm_cluster_powerup() argument
64 pr_debug("%s: cluster %u\n", __func__, cluster); in tc2_pm_cluster_powerup()
65 if (cluster >= TC2_CLUSTERS) in tc2_pm_cluster_powerup()
67 ve_spc_powerdown(cluster, false); in tc2_pm_cluster_powerup()
71 static void tc2_pm_cpu_powerdown_prepare(unsigned int cpu, unsigned int cluster) in tc2_pm_cpu_powerdown_prepare() argument
[all …]
Ddcscb.c2 * arch/arm/mach-vexpress/dcscb.c - Dual Cluster System Configuration Block
41 static int dcscb_cpu_powerup(unsigned int cpu, unsigned int cluster) in dcscb_cpu_powerup() argument
45 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in dcscb_cpu_powerup()
46 if (cluster >= 2 || !(cpumask & dcscb_allcpus_mask[cluster])) in dcscb_cpu_powerup()
49 rst_hold = readl_relaxed(dcscb_base + RST_HOLD0 + cluster * 4); in dcscb_cpu_powerup()
51 writel_relaxed(rst_hold, dcscb_base + RST_HOLD0 + cluster * 4); in dcscb_cpu_powerup()
55 static int dcscb_cluster_powerup(unsigned int cluster) in dcscb_cluster_powerup() argument
59 pr_debug("%s: cluster %u\n", __func__, cluster); in dcscb_cluster_powerup()
60 if (cluster >= 2) in dcscb_cluster_powerup()
63 /* remove cluster reset and add individual CPU's reset */ in dcscb_cluster_powerup()
[all …]
Dspc.c58 /* SPC CPU/cluster reset statue */
79 /* TC2 static dual-cluster configuration */
105 * A15s cluster identifier
119 static inline bool cluster_is_a15(u32 cluster) in cluster_is_a15() argument
121 return cluster == info->a15_clusid; in cluster_is_a15()
154 * @cluster: mpidr[15:8] bitfield describing cluster affinity level
158 void ve_spc_cpu_wakeup_irq(u32 cluster, u32 cpu, bool set) in ve_spc_cpu_wakeup_irq() argument
162 if (cluster >= MAX_CLUSTERS) in ve_spc_cpu_wakeup_irq()
167 if (!cluster_is_a15(cluster)) in ve_spc_cpu_wakeup_irq()
183 * @cluster: mpidr[15:8] bitfield describing cluster affinity level
[all …]
/kernel/linux/linux-5.10/Documentation/arm/
Dcluster-pm-race-avoidance.rst2 Cluster-wide Power-up/power-down race avoidance algorithm
6 cluster setup and teardown operations and to manage hardware coherency
29 cluster-level operations are only performed when it is truly safe to do
34 are not immediately enabled when a cluster powers up. Since enabling or
38 power-down and power-up at the cluster level.
48 Each cluster and CPU is assigned a state, as follows:
67 The CPU or cluster is not coherent, and is either powered off or
71 The CPU or cluster has committed to moving to the UP state.
76 The CPU or cluster is active and coherent at the hardware
81 The CPU or cluster has committed to moving to the DOWN
[all …]
/kernel/linux/linux-5.10/fs/ocfs2/cluster/
Dnodemanager.c20 * cluster active at a time. Changing this will require trickling
21 * cluster references throughout where nodes are looked up */
51 struct o2nm_cluster *cluster = o2nm_single_cluster; in o2nm_configured_node_map() local
53 BUG_ON(bytes < (sizeof(cluster->cl_nodes_bitmap))); in o2nm_configured_node_map()
55 if (cluster == NULL) in o2nm_configured_node_map()
58 read_lock(&cluster->cl_nodes_lock); in o2nm_configured_node_map()
59 memcpy(map, cluster->cl_nodes_bitmap, sizeof(cluster->cl_nodes_bitmap)); in o2nm_configured_node_map()
60 read_unlock(&cluster->cl_nodes_lock); in o2nm_configured_node_map()
66 static struct o2nm_node *o2nm_node_ip_tree_lookup(struct o2nm_cluster *cluster, in o2nm_node_ip_tree_lookup() argument
71 struct rb_node **p = &cluster->cl_node_ip_tree.rb_node; in o2nm_node_ip_tree_lookup()
[all …]
/kernel/linux/linux-4.19/fs/ocfs2/cluster/
Dnodemanager.c34 * cluster active at a time. Changing this will require trickling
35 * cluster references throughout where nodes are looked up */
65 struct o2nm_cluster *cluster = o2nm_single_cluster; in o2nm_configured_node_map() local
67 BUG_ON(bytes < (sizeof(cluster->cl_nodes_bitmap))); in o2nm_configured_node_map()
69 if (cluster == NULL) in o2nm_configured_node_map()
72 read_lock(&cluster->cl_nodes_lock); in o2nm_configured_node_map()
73 memcpy(map, cluster->cl_nodes_bitmap, sizeof(cluster->cl_nodes_bitmap)); in o2nm_configured_node_map()
74 read_unlock(&cluster->cl_nodes_lock); in o2nm_configured_node_map()
80 static struct o2nm_node *o2nm_node_ip_tree_lookup(struct o2nm_cluster *cluster, in o2nm_node_ip_tree_lookup() argument
85 struct rb_node **p = &cluster->cl_node_ip_tree.rb_node; in o2nm_node_ip_tree_lookup()
[all …]
/kernel/linux/linux-5.10/drivers/perf/
Dqcom_l2_pmu.c121 * The cache is made up of one or more clusters, each cluster has its own PMU.
122 * Each cluster is associated with one or more CPUs.
143 /* The CPU that is used for collecting events on this cluster */
145 /* All the CPUs associated with this cluster */
243 static void cluster_pmu_set_resr(struct cluster_pmu *cluster, in cluster_pmu_set_resr() argument
254 spin_lock_irqsave(&cluster->pmu_lock, flags); in cluster_pmu_set_resr()
262 spin_unlock_irqrestore(&cluster->pmu_lock, flags); in cluster_pmu_set_resr()
268 * all CPUS, subunits and ID independent events in this cluster.
319 static void l2_cache_cluster_set_period(struct cluster_pmu *cluster, in l2_cache_cluster_set_period() argument
339 static int l2_cache_get_event_idx(struct cluster_pmu *cluster, in l2_cache_get_event_idx() argument
[all …]
/kernel/linux/linux-5.10/arch/arm/mach-exynos/
Dmcpm-exynos.c59 static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) in exynos_cpu_powerup() argument
61 unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER); in exynos_cpu_powerup()
64 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in exynos_cpu_powerup()
66 cluster >= EXYNOS5420_NR_CLUSTERS) in exynos_cpu_powerup()
73 * This assumes the cluster number of the big cores(Cortex A15) in exynos_cpu_powerup()
78 if (cluster && in exynos_cpu_powerup()
79 cluster == MPIDR_AFFINITY_LEVEL(cpu_logical_map(0), 1)) { in exynos_cpu_powerup()
94 pr_err("cpu %u cluster %u powerup failed\n", in exynos_cpu_powerup()
95 cpu, cluster); in exynos_cpu_powerup()
108 static int exynos_cluster_powerup(unsigned int cluster) in exynos_cluster_powerup() argument
[all …]
/kernel/linux/linux-4.19/arch/arm/mach-exynos/
Dmcpm-exynos.c58 static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) in exynos_cpu_powerup() argument
60 unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER); in exynos_cpu_powerup()
62 pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); in exynos_cpu_powerup()
64 cluster >= EXYNOS5420_NR_CLUSTERS) in exynos_cpu_powerup()
71 * This assumes the cluster number of the big cores(Cortex A15) in exynos_cpu_powerup()
76 if (cluster && in exynos_cpu_powerup()
77 cluster == MPIDR_AFFINITY_LEVEL(cpu_logical_map(0), 1)) { in exynos_cpu_powerup()
95 static int exynos_cluster_powerup(unsigned int cluster) in exynos_cluster_powerup() argument
97 pr_debug("%s: cluster %u\n", __func__, cluster); in exynos_cluster_powerup()
98 if (cluster >= EXYNOS5420_NR_CLUSTERS) in exynos_cluster_powerup()
[all …]
/kernel/linux/linux-4.19/drivers/perf/
Dqcom_l2_pmu.c171 * The cache is made up of one or more clusters, each cluster has its own PMU.
172 * Each cluster is associated with one or more CPUs.
193 /* The CPU that is used for collecting events on this cluster */
195 /* All the CPUs associated with this cluster */
293 static void cluster_pmu_set_resr(struct cluster_pmu *cluster, in cluster_pmu_set_resr() argument
304 spin_lock_irqsave(&cluster->pmu_lock, flags); in cluster_pmu_set_resr()
312 spin_unlock_irqrestore(&cluster->pmu_lock, flags); in cluster_pmu_set_resr()
318 * all CPUS, subunits and ID independent events in this cluster.
369 static void l2_cache_cluster_set_period(struct cluster_pmu *cluster, in l2_cache_cluster_set_period() argument
389 static int l2_cache_get_event_idx(struct cluster_pmu *cluster, in l2_cache_get_event_idx() argument
[all …]
/kernel/linux/linux-5.10/arch/arm/include/asm/
Dmcpm.h13 * Maximum number of possible clusters / CPUs per cluster.
39 * This is used to indicate where the given CPU from given cluster should
44 void mcpm_set_entry_vector(unsigned cpu, unsigned cluster, void *ptr);
51 void mcpm_set_early_poke(unsigned cpu, unsigned cluster,
55 * CPU/cluster power operations API for higher subsystems to use.
66 * mcpm_cpu_power_up - make given CPU in given cluster runable
68 * @cpu: CPU number within given cluster
69 * @cluster: cluster number for the CPU
71 * The identified CPU is brought out of reset. If the cluster was powered
73 * in the cluster run, and ensuring appropriate cluster setup.
[all …]
/kernel/linux/linux-4.19/arch/arm/include/asm/
Dmcpm.h16 * Maximum number of possible clusters / CPUs per cluster.
42 * This is used to indicate where the given CPU from given cluster should
47 void mcpm_set_entry_vector(unsigned cpu, unsigned cluster, void *ptr);
54 void mcpm_set_early_poke(unsigned cpu, unsigned cluster,
58 * CPU/cluster power operations API for higher subsystems to use.
69 * mcpm_cpu_power_up - make given CPU in given cluster runable
71 * @cpu: CPU number within given cluster
72 * @cluster: cluster number for the CPU
74 * The identified CPU is brought out of reset. If the cluster was powered
76 * in the cluster run, and ensuring appropriate cluster setup.
[all …]
/kernel/linux/linux-4.19/arch/arm/mach-hisi/
Dplatmcpm.c74 static bool hip04_cluster_is_down(unsigned int cluster) in hip04_cluster_is_down() argument
79 if (hip04_cpu_table[cluster][i]) in hip04_cluster_is_down()
84 static void hip04_set_snoop_filter(unsigned int cluster, unsigned int on) in hip04_set_snoop_filter() argument
92 data |= 1 << cluster; in hip04_set_snoop_filter()
94 data &= ~(1 << cluster); in hip04_set_snoop_filter()
103 unsigned int mpidr, cpu, cluster; in hip04_boot_secondary() local
109 cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); in hip04_boot_secondary()
113 if (cluster >= HIP04_MAX_CLUSTERS || cpu >= HIP04_MAX_CPUS_PER_CLUSTER) in hip04_boot_secondary()
118 if (hip04_cpu_table[cluster][cpu]) in hip04_boot_secondary()
121 sys_dreq = sysctrl + SC_CPU_RESET_DREQ(cluster); in hip04_boot_secondary()
[all …]
/kernel/linux/linux-5.10/arch/arm/mach-hisi/
Dplatmcpm.c71 static bool hip04_cluster_is_down(unsigned int cluster) in hip04_cluster_is_down() argument
76 if (hip04_cpu_table[cluster][i]) in hip04_cluster_is_down()
81 static void hip04_set_snoop_filter(unsigned int cluster, unsigned int on) in hip04_set_snoop_filter() argument
89 data |= 1 << cluster; in hip04_set_snoop_filter()
91 data &= ~(1 << cluster); in hip04_set_snoop_filter()
100 unsigned int mpidr, cpu, cluster; in hip04_boot_secondary() local
106 cluster = MPIDR_AFFINITY_LEVEL(mpidr, 1); in hip04_boot_secondary()
110 if (cluster >= HIP04_MAX_CLUSTERS || cpu >= HIP04_MAX_CPUS_PER_CLUSTER) in hip04_boot_secondary()
115 if (hip04_cpu_table[cluster][cpu]) in hip04_boot_secondary()
118 sys_dreq = sysctrl + SC_CPU_RESET_DREQ(cluster); in hip04_boot_secondary()
[all …]
/kernel/linux/linux-5.10/Documentation/ABI/testing/
Dsysfs-ocfs214 covers how ocfs2 uses distributed locking between cluster
18 cluster nodes can interoperate if they have an identical
34 the available plugins to support ocfs2 cluster operation.
35 A cluster plugin is required to use ocfs2 in a cluster.
38 * 'o2cb' - The classic o2cb cluster stack that ocfs2 has
40 * 'user' - A plugin supporting userspace cluster software
54 cluster plugin is currently in use by the filesystem.
62 the cluster stack in use. The contents may change
63 when all filesystems are unmounted and the cluster stack
71 of current ocfs2 cluster stack. This value is set by
[all …]
/kernel/linux/linux-4.19/Documentation/ABI/testing/
Dsysfs-ocfs214 covers how ocfs2 uses distributed locking between cluster
18 cluster nodes can interoperate if they have an identical
34 the available plugins to support ocfs2 cluster operation.
35 A cluster plugin is required to use ocfs2 in a cluster.
38 * 'o2cb' - The classic o2cb cluster stack that ocfs2 has
40 * 'user' - A plugin supporting userspace cluster software
54 cluster plugin is currently in use by the filesystem.
62 the cluster stack in use. The contents may change
63 when all filesystems are unmounted and the cluster stack
71 of current ocfs2 cluster stack. This value is set by
[all …]

12345678910>>...46