diff options
| -rw-r--r-- | arch/powerpc/include/asm/lppaca.h | 16 | ||||
| -rw-r--r-- | arch/powerpc/kernel/paca.c | 14 | ||||
| -rw-r--r-- | arch/powerpc/mm/numa.c | 3 | ||||
| -rw-r--r-- | arch/powerpc/platforms/iseries/dt.c | 6 | ||||
| -rw-r--r-- | arch/powerpc/platforms/iseries/setup.c | 1 |
5 files changed, 22 insertions, 18 deletions
diff --git a/arch/powerpc/include/asm/lppaca.h b/arch/powerpc/include/asm/lppaca.h index 380d48bacd1..26b8c807f8f 100644 --- a/arch/powerpc/include/asm/lppaca.h +++ b/arch/powerpc/include/asm/lppaca.h | |||
| @@ -33,9 +33,25 @@ | |||
| 33 | // | 33 | // |
| 34 | //---------------------------------------------------------------------------- | 34 | //---------------------------------------------------------------------------- |
| 35 | #include <linux/cache.h> | 35 | #include <linux/cache.h> |
| 36 | #include <linux/threads.h> | ||
| 36 | #include <asm/types.h> | 37 | #include <asm/types.h> |
| 37 | #include <asm/mmu.h> | 38 | #include <asm/mmu.h> |
| 38 | 39 | ||
| 40 | /* | ||
| 41 | * We only have to have statically allocated lppaca structs on | ||
| 42 | * legacy iSeries, which supports at most 64 cpus. | ||
| 43 | */ | ||
| 44 | #ifdef CONFIG_PPC_ISERIES | ||
| 45 | #if NR_CPUS < 64 | ||
| 46 | #define NR_LPPACAS NR_CPUS | ||
| 47 | #else | ||
| 48 | #define NR_LPPACAS 64 | ||
| 49 | #endif | ||
| 50 | #else /* not iSeries */ | ||
| 51 | #define NR_LPPACAS 1 | ||
| 52 | #endif | ||
| 53 | |||
| 54 | |||
| 39 | /* The Hypervisor barfs if the lppaca crosses a page boundary. A 1k | 55 | /* The Hypervisor barfs if the lppaca crosses a page boundary. A 1k |
| 40 | * alignment is sufficient to prevent this */ | 56 | * alignment is sufficient to prevent this */ |
| 41 | struct lppaca { | 57 | struct lppaca { |
diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index ebf9846f3c3..f4adf89d761 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c | |||
| @@ -27,20 +27,6 @@ extern unsigned long __toc_start; | |||
| 27 | #ifdef CONFIG_PPC_BOOK3S | 27 | #ifdef CONFIG_PPC_BOOK3S |
| 28 | 28 | ||
| 29 | /* | 29 | /* |
| 30 | * We only have to have statically allocated lppaca structs on | ||
| 31 | * legacy iSeries, which supports at most 64 cpus. | ||
| 32 | */ | ||
| 33 | #ifdef CONFIG_PPC_ISERIES | ||
| 34 | #if NR_CPUS < 64 | ||
| 35 | #define NR_LPPACAS NR_CPUS | ||
| 36 | #else | ||
| 37 | #define NR_LPPACAS 64 | ||
| 38 | #endif | ||
| 39 | #else /* not iSeries */ | ||
| 40 | #define NR_LPPACAS 1 | ||
| 41 | #endif | ||
| 42 | |||
| 43 | /* | ||
| 44 | * The structure which the hypervisor knows about - this structure | 30 | * The structure which the hypervisor knows about - this structure |
| 45 | * should not cross a page boundary. The vpa_init/register_vpa call | 31 | * should not cross a page boundary. The vpa_init/register_vpa call |
| 46 | * is now known to fail if the lppaca structure crosses a page | 32 | * is now known to fail if the lppaca structure crosses a page |
diff --git a/arch/powerpc/mm/numa.c b/arch/powerpc/mm/numa.c index fd481232957..0dc95c0aa3b 100644 --- a/arch/powerpc/mm/numa.c +++ b/arch/powerpc/mm/numa.c | |||
| @@ -1516,7 +1516,8 @@ int start_topology_update(void) | |||
| 1516 | { | 1516 | { |
| 1517 | int rc = 0; | 1517 | int rc = 0; |
| 1518 | 1518 | ||
| 1519 | if (firmware_has_feature(FW_FEATURE_VPHN) && | 1519 | /* Disabled until races with load balancing are fixed */ |
| 1520 | if (0 && firmware_has_feature(FW_FEATURE_VPHN) && | ||
| 1520 | get_lppaca()->shared_proc) { | 1521 | get_lppaca()->shared_proc) { |
| 1521 | vphn_enabled = 1; | 1522 | vphn_enabled = 1; |
| 1522 | setup_cpu_associativity_change_counters(); | 1523 | setup_cpu_associativity_change_counters(); |
diff --git a/arch/powerpc/platforms/iseries/dt.c b/arch/powerpc/platforms/iseries/dt.c index fdb7384c0c4..f0491cc2890 100644 --- a/arch/powerpc/platforms/iseries/dt.c +++ b/arch/powerpc/platforms/iseries/dt.c | |||
| @@ -242,8 +242,8 @@ static void __init dt_cpus(struct iseries_flat_dt *dt) | |||
| 242 | pft_size[0] = 0; /* NUMA CEC cookie, 0 for non NUMA */ | 242 | pft_size[0] = 0; /* NUMA CEC cookie, 0 for non NUMA */ |
| 243 | pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE); | 243 | pft_size[1] = __ilog2(HvCallHpt_getHptPages() * HW_PAGE_SIZE); |
| 244 | 244 | ||
| 245 | for (i = 0; i < NR_CPUS; i++) { | 245 | for (i = 0; i < NR_LPPACAS; i++) { |
| 246 | if (lppaca_of(i).dyn_proc_status >= 2) | 246 | if (lppaca[i].dyn_proc_status >= 2) |
| 247 | continue; | 247 | continue; |
| 248 | 248 | ||
| 249 | snprintf(p, 32 - (p - buf), "@%d", i); | 249 | snprintf(p, 32 - (p - buf), "@%d", i); |
| @@ -251,7 +251,7 @@ static void __init dt_cpus(struct iseries_flat_dt *dt) | |||
| 251 | 251 | ||
| 252 | dt_prop_str(dt, "device_type", device_type_cpu); | 252 | dt_prop_str(dt, "device_type", device_type_cpu); |
| 253 | 253 | ||
| 254 | index = lppaca_of(i).dyn_hv_phys_proc_index; | 254 | index = lppaca[i].dyn_hv_phys_proc_index; |
| 255 | d = &xIoHriProcessorVpd[index]; | 255 | d = &xIoHriProcessorVpd[index]; |
| 256 | 256 | ||
| 257 | dt_prop_u32(dt, "i-cache-size", d->xInstCacheSize * 1024); | 257 | dt_prop_u32(dt, "i-cache-size", d->xInstCacheSize * 1024); |
diff --git a/arch/powerpc/platforms/iseries/setup.c b/arch/powerpc/platforms/iseries/setup.c index b0863410517..2946ae10fbf 100644 --- a/arch/powerpc/platforms/iseries/setup.c +++ b/arch/powerpc/platforms/iseries/setup.c | |||
| @@ -680,6 +680,7 @@ void * __init iSeries_early_setup(void) | |||
| 680 | * on but calling this function multiple times is fine. | 680 | * on but calling this function multiple times is fine. |
| 681 | */ | 681 | */ |
| 682 | identify_cpu(0, mfspr(SPRN_PVR)); | 682 | identify_cpu(0, mfspr(SPRN_PVR)); |
| 683 | initialise_paca(&boot_paca, 0); | ||
| 683 | 684 | ||
| 684 | powerpc_firmware_features |= FW_FEATURE_ISERIES; | 685 | powerpc_firmware_features |= FW_FEATURE_ISERIES; |
| 685 | powerpc_firmware_features |= FW_FEATURE_LPAR; | 686 | powerpc_firmware_features |= FW_FEATURE_LPAR; |
