Merge branch 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc
* '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
This commit is contained in:
@@ -33,9 +33,25 @@
|
|||||||
//
|
//
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
#include <linux/cache.h>
|
#include <linux/cache.h>
|
||||||
|
#include <linux/threads.h>
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/mmu.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
|
/* The Hypervisor barfs if the lppaca crosses a page boundary. A 1k
|
||||||
* alignment is sufficient to prevent this */
|
* alignment is sufficient to prevent this */
|
||||||
struct lppaca {
|
struct lppaca {
|
||||||
|
@@ -26,20 +26,6 @@ extern unsigned long __toc_start;
|
|||||||
|
|
||||||
#ifdef CONFIG_PPC_BOOK3S
|
#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
|
* The structure which the hypervisor knows about - this structure
|
||||||
* should not cross a page boundary. The vpa_init/register_vpa call
|
* should not cross a page boundary. The vpa_init/register_vpa call
|
||||||
|
@@ -1516,7 +1516,8 @@ int start_topology_update(void)
|
|||||||
{
|
{
|
||||||
int rc = 0;
|
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) {
|
get_lppaca()->shared_proc) {
|
||||||
vphn_enabled = 1;
|
vphn_enabled = 1;
|
||||||
setup_cpu_associativity_change_counters();
|
setup_cpu_associativity_change_counters();
|
||||||
|
@@ -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[0] = 0; /* NUMA CEC cookie, 0 for non NUMA */
|
||||||
pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE);
|
pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE);
|
||||||
|
|
||||||
for (i = 0; i < NR_CPUS; i++) {
|
for (i = 0; i < NR_LPPACAS; i++) {
|
||||||
if (lppaca_of(i).dyn_proc_status >= 2)
|
if (lppaca[i].dyn_proc_status >= 2)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
snprintf(p, 32 - (p - buf), "@%d", i);
|
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);
|
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];
|
d = &xIoHriProcessorVpd[index];
|
||||||
|
|
||||||
dt_prop_u32(dt, "i-cache-size", d->xInstCacheSize * 1024);
|
dt_prop_u32(dt, "i-cache-size", d->xInstCacheSize * 1024);
|
||||||
|
@@ -680,6 +680,7 @@ void * __init iSeries_early_setup(void)
|
|||||||
* on but calling this function multiple times is fine.
|
* on but calling this function multiple times is fine.
|
||||||
*/
|
*/
|
||||||
identify_cpu(0, mfspr(SPRN_PVR));
|
identify_cpu(0, mfspr(SPRN_PVR));
|
||||||
|
initialise_paca(&boot_paca, 0);
|
||||||
|
|
||||||
powerpc_firmware_features |= FW_FEATURE_ISERIES;
|
powerpc_firmware_features |= FW_FEATURE_ISERIES;
|
||||||
powerpc_firmware_features |= FW_FEATURE_LPAR;
|
powerpc_firmware_features |= FW_FEATURE_LPAR;
|
||||||
|
Reference in New Issue
Block a user