Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8154c5d2 authored by Paul Mackerras's avatar Paul Mackerras Committed by Benjamin Herrenschmidt
Browse files

powerpc: Abstract indexing of lppaca structs



Currently we have the lppaca structs as a simple array of NR_CPUS
entries, taking up space in the data section of the kernel image.
In future we would like to allocate them dynamically, so this
abstracts out the accesses to the array, making it easier to
change how we locate the lppaca for a given cpu in future.
Specifically, lppaca[cpu] changes to lppaca_of(cpu).

Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent e1f0ece1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -153,6 +153,8 @@ struct lppaca {

extern struct lppaca lppaca[];

#define lppaca_of(cpu)	(lppaca[cpu])

/*
 * SLB shadow buffer structure as defined in the PAPR.  The save_area
 * contains adjacent ESID and VSID pairs for each shadowed SLB.  The
+7 −7
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ static unsigned long get_purr(void)

	for_each_possible_cpu(cpu) {
		if (firmware_has_feature(FW_FEATURE_ISERIES))
			sum_purr += lppaca[cpu].emulated_time_base;
			sum_purr += lppaca_of(cpu).emulated_time_base;
		else {
			struct cpu_usage *cu;

@@ -263,7 +263,7 @@ static void parse_ppp_data(struct seq_file *m)
	           ppp_data.active_system_procs);

	/* pool related entries are apropriate for shared configs */
	if (lppaca[0].shared_proc) {
	if (lppaca_of(0).shared_proc) {
		unsigned long pool_idle_time, pool_procs;

		seq_printf(m, "pool=%d\n", ppp_data.pool_num);
@@ -460,8 +460,8 @@ static void pseries_cmo_data(struct seq_file *m)
		return;

	for_each_possible_cpu(cpu) {
		cmo_faults += lppaca[cpu].cmo_faults;
		cmo_fault_time += lppaca[cpu].cmo_fault_time;
		cmo_faults += lppaca_of(cpu).cmo_faults;
		cmo_fault_time += lppaca_of(cpu).cmo_fault_time;
	}

	seq_printf(m, "cmo_faults=%lu\n", cmo_faults);
@@ -479,8 +479,8 @@ static void splpar_dispatch_data(struct seq_file *m)
	unsigned long dispatch_dispersions = 0;

	for_each_possible_cpu(cpu) {
		dispatches += lppaca[cpu].yield_count;
		dispatch_dispersions += lppaca[cpu].dispersion_count;
		dispatches += lppaca_of(cpu).yield_count;
		dispatch_dispersions += lppaca_of(cpu).dispersion_count;
	}

	seq_printf(m, "dispatches=%lu\n", dispatches);
@@ -545,7 +545,7 @@ static int pseries_lparcfg_data(struct seq_file *m, void *v)
	seq_printf(m, "partition_potential_processors=%d\n",
		   partition_potential_processors);

	seq_printf(m, "shared_processor_mode=%d\n", lppaca[0].shared_proc);
	seq_printf(m, "shared_processor_mode=%d\n", lppaca_of(0).shared_proc);

	seq_printf(m, "slb_size=%d\n", mmu_slb_size);

+2 −2
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ void __spin_yield(arch_spinlock_t *lock)
		return;
	holder_cpu = lock_value & 0xffff;
	BUG_ON(holder_cpu >= NR_CPUS);
	yield_count = lppaca[holder_cpu].yield_count;
	yield_count = lppaca_of(holder_cpu).yield_count;
	if ((yield_count & 1) == 0)
		return;		/* virtual cpu is currently running */
	rmb();
@@ -65,7 +65,7 @@ void __rw_yield(arch_rwlock_t *rw)
		return;		/* no write lock at present */
	holder_cpu = lock_value & 0xffff;
	BUG_ON(holder_cpu >= NR_CPUS);
	yield_count = lppaca[holder_cpu].yield_count;
	yield_count = lppaca_of(holder_cpu).yield_count;
	if ((yield_count & 1) == 0)
		return;		/* virtual cpu is currently running */
	rmb();
+2 −2
Original line number Diff line number Diff line
@@ -243,7 +243,7 @@ static void __init dt_cpus(struct iseries_flat_dt *dt)
	pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE);

	for (i = 0; i < NR_CPUS; i++) {
		if (lppaca[i].dyn_proc_status >= 2)
		if (lppaca_of(i).dyn_proc_status >= 2)
			continue;

		snprintf(p, 32 - (p - buf), "@%d", i);
@@ -251,7 +251,7 @@ static void __init dt_cpus(struct iseries_flat_dt *dt)

		dt_prop_str(dt, "device_type", device_type_cpu);

		index = lppaca[i].dyn_hv_phys_proc_index;
		index = lppaca_of(i).dyn_hv_phys_proc_index;
		d = &xIoHriProcessorVpd[index];

		dt_prop_u32(dt, "i-cache-size", d->xInstCacheSize * 1024);
+1 −1
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ static void smp_iSeries_kick_cpu(int nr)
	BUG_ON((nr < 0) || (nr >= NR_CPUS));

	/* Verify that our partition has a processor nr */
	if (lppaca[nr].dyn_proc_status >= 2)
	if (lppaca_of(nr).dyn_proc_status >= 2)
		return;

	/* The processor is currently spinning, waiting
Loading