Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 324086
b: refs/heads/master
c: 50ab9a9
h: refs/heads/master
v: v3
  • Loading branch information
Heiko Carstens authored and Martin Schwidefsky committed Sep 26, 2012
1 parent 8fa81f3 commit b73f46a
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 30 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fade4dc49101e3b68fb375fd2b00d0ef1f31a36f
refs/heads/master: 50ab9a9a60fc83b8e8db36b54f365226e2b139ac
2 changes: 2 additions & 0 deletions trunk/arch/s390/include/asm/smp.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ extern int smp_vcpu_scheduled(int cpu);
extern void smp_yield_cpu(int cpu);
extern void smp_yield(void);
extern void smp_stop_cpu(void);
extern void smp_cpu_set_polarization(int cpu, int val);
extern int smp_cpu_get_polarization(int cpu);

#else /* CONFIG_SMP */

Expand Down
18 changes: 0 additions & 18 deletions trunk/arch/s390/include/asm/topology.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,24 +51,6 @@ static inline void topology_expect_change(void) { }
#define POLARIZATION_VM (2)
#define POLARIZATION_VH (3)

extern int cpu_polarization[];

static inline void cpu_set_polarization(int cpu, int val)
{
#ifdef CONFIG_SCHED_BOOK
cpu_polarization[cpu] = val;
#endif
}

static inline int cpu_read_polarization(int cpu)
{
#ifdef CONFIG_SCHED_BOOK
return cpu_polarization[cpu];
#else
return POLARIZATION_HRZ;
#endif
}

#ifdef CONFIG_SCHED_BOOK
void s390_init_cpu_topology(void);
#else
Expand Down
23 changes: 19 additions & 4 deletions trunk/arch/s390/kernel/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -66,13 +66,18 @@ struct pcpu {
unsigned long panic_stack; /* panic stack for the cpu */
unsigned long ec_mask; /* bit mask for ec_xxx functions */
int state; /* physical cpu state */
int polarization; /* physical polarization */
u16 address; /* physical cpu address */
};

static u8 boot_cpu_type;
static u16 boot_cpu_address;
static struct pcpu pcpu_devices[NR_CPUS];

/*
* The smp_cpu_state_mutex must be held when changing the state or polarization
* member of a pcpu data structure within the pcpu_devices arreay.
*/
DEFINE_MUTEX(smp_cpu_state_mutex);

/*
Expand Down Expand Up @@ -587,6 +592,16 @@ static inline void smp_get_save_area(int cpu, u16 address) { }

#endif /* CONFIG_ZFCPDUMP || CONFIG_CRASH_DUMP */

void smp_cpu_set_polarization(int cpu, int val)
{
pcpu_devices[cpu].polarization = val;
}

int smp_cpu_get_polarization(int cpu)
{
return pcpu_devices[cpu].polarization;
}

static struct sclp_cpu_info *smp_get_cpu_info(void)
{
static int use_sigp_detection;
Expand Down Expand Up @@ -629,7 +644,7 @@ static int __devinit __smp_rescan_cpus(struct sclp_cpu_info *info,
pcpu->address = info->cpu[i].address;
pcpu->state = (cpu >= info->configured) ?
CPU_STATE_STANDBY : CPU_STATE_CONFIGURED;
cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
set_cpu_present(cpu, true);
if (sysfs_add && smp_add_present_cpu(cpu) != 0)
set_cpu_present(cpu, false);
Expand Down Expand Up @@ -797,7 +812,7 @@ void __init smp_prepare_boot_cpu(void)
pcpu->async_stack = S390_lowcore.async_stack - ASYNC_SIZE;
pcpu->panic_stack = S390_lowcore.panic_stack - PAGE_SIZE;
S390_lowcore.percpu_offset = __per_cpu_offset[0];
cpu_set_polarization(0, POLARIZATION_UNKNOWN);
smp_cpu_set_polarization(0, POLARIZATION_UNKNOWN);
set_cpu_present(0, true);
set_cpu_online(0, true);
}
Expand Down Expand Up @@ -863,7 +878,7 @@ static ssize_t cpu_configure_store(struct device *dev,
if (rc)
break;
pcpu->state = CPU_STATE_STANDBY;
cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
topology_expect_change();
break;
case 1:
Expand All @@ -873,7 +888,7 @@ static ssize_t cpu_configure_store(struct device *dev,
if (rc)
break;
pcpu->state = CPU_STATE_CONFIGURED;
cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
topology_expect_change();
break;
default:
Expand Down
11 changes: 4 additions & 7 deletions trunk/arch/s390/kernel/topology.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,6 @@ static struct mask_info book_info;
cpumask_t cpu_book_map[NR_CPUS];
unsigned char cpu_book_id[NR_CPUS];

/* smp_cpu_state_mutex must be held when accessing this array */
int cpu_polarization[NR_CPUS];

static cpumask_t cpu_group_map(struct mask_info *info, unsigned int cpu)
{
cpumask_t mask;
Expand Down Expand Up @@ -95,7 +92,7 @@ static struct mask_info *add_cpus_to_mask(struct topology_cpu *tl_cpu,
} else {
cpu_core_id[lcpu] = core->id;
}
cpu_set_polarization(lcpu, tl_cpu->pp);
smp_cpu_set_polarization(lcpu, tl_cpu->pp);
}
}
return core;
Expand Down Expand Up @@ -202,7 +199,7 @@ static void topology_update_polarization_simple(void)

mutex_lock(&smp_cpu_state_mutex);
for_each_possible_cpu(cpu)
cpu_set_polarization(cpu, POLARIZATION_HRZ);
smp_cpu_set_polarization(cpu, POLARIZATION_HRZ);
mutex_unlock(&smp_cpu_state_mutex);
}

Expand Down Expand Up @@ -232,7 +229,7 @@ int topology_set_cpu_management(int fc)
if (rc)
return -EBUSY;
for_each_possible_cpu(cpu)
cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
smp_cpu_set_polarization(cpu, POLARIZATION_UNKNOWN);
return rc;
}

Expand Down Expand Up @@ -414,7 +411,7 @@ static ssize_t cpu_polarization_show(struct device *dev,
ssize_t count;

mutex_lock(&smp_cpu_state_mutex);
switch (cpu_read_polarization(cpu)) {
switch (smp_cpu_get_polarization(cpu)) {
case POLARIZATION_HRZ:
count = sprintf(buf, "horizontal\n");
break;
Expand Down

0 comments on commit b73f46a

Please sign in to comment.