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

Commit 35d34df7 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
  powerpc/pseries: Disable VPNH feature
  powerpc/iseries: Fix early init access to lppaca
parents ab02a954 36e8695c
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -33,9 +33,25 @@
//
//----------------------------------------------------------------------------
#include <linux/cache.h>
#include <linux/threads.h>
#include <asm/types.h>
#include <asm/mmu.h>

/*
 * We only have to have statically allocated lppaca structs on
 * legacy iSeries, which supports at most 64 cpus.
 */
#ifdef CONFIG_PPC_ISERIES
#if NR_CPUS < 64
#define NR_LPPACAS	NR_CPUS
#else
#define NR_LPPACAS	64
#endif
#else /* not iSeries */
#define NR_LPPACAS	1
#endif


/* The Hypervisor barfs if the lppaca crosses a page boundary.  A 1k
 * alignment is sufficient to prevent this */
struct lppaca {
+0 −14
Original line number Diff line number Diff line
@@ -26,20 +26,6 @@ extern unsigned long __toc_start;

#ifdef CONFIG_PPC_BOOK3S

/*
 * We only have to have statically allocated lppaca structs on
 * legacy iSeries, which supports at most 64 cpus.
 */
#ifdef CONFIG_PPC_ISERIES
#if NR_CPUS < 64
#define NR_LPPACAS	NR_CPUS
#else
#define NR_LPPACAS	64
#endif
#else /* not iSeries */
#define NR_LPPACAS	1
#endif

/*
 * The structure which the hypervisor knows about - this structure
 * should not cross a page boundary.  The vpa_init/register_vpa call
+2 −1
Original line number Diff line number Diff line
@@ -1516,7 +1516,8 @@ int start_topology_update(void)
{
	int rc = 0;

	if (firmware_has_feature(FW_FEATURE_VPHN) &&
	/* Disabled until races with load balancing are fixed */
	if (0 && firmware_has_feature(FW_FEATURE_VPHN) &&
	    get_lppaca()->shared_proc) {
		vphn_enabled = 1;
		setup_cpu_associativity_change_counters();
+3 −3
Original line number Diff line number Diff line
@@ -242,8 +242,8 @@ static void __init dt_cpus(struct iseries_flat_dt *dt)
	pft_size[0] = 0; /* NUMA CEC cookie, 0 for non NUMA  */
	pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE);

	for (i = 0; i < NR_CPUS; i++) {
		if (lppaca_of(i).dyn_proc_status >= 2)
	for (i = 0; i < NR_LPPACAS; i++) {
		if (lppaca[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_of(i).dyn_hv_phys_proc_index;
		index = lppaca[i].dyn_hv_phys_proc_index;
		d = &xIoHriProcessorVpd[index];

		dt_prop_u32(dt, "i-cache-size", d->xInstCacheSize * 1024);
+1 −0
Original line number Diff line number Diff line
@@ -680,6 +680,7 @@ void * __init iSeries_early_setup(void)
	 * on but calling this function multiple times is fine.
	 */
	identify_cpu(0, mfspr(SPRN_PVR));
	initialise_paca(&boot_paca, 0);

	powerpc_firmware_features |= FW_FEATURE_ISERIES;
	powerpc_firmware_features |= FW_FEATURE_LPAR;