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

Commit cf00a8d1 authored by Paul Mackerras's avatar Paul Mackerras
Browse files

powerpc: Fix bug arising from having multiple memory_limit variables



We had a static memory_limit in prom.c, and then another one defined
in setup_64.c and used in numa.c, which resulted in the kernel crashing
when mem=xxx was given on the command line.  This puts the declaration
in system.h and the definition in mem.c.  This also moves the
definition of tce_alloc_start/end out of setup_64.c.

Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 5f6b5b97
Loading
Loading
Loading
Loading
+1 −3
Original line number Original line Diff line number Diff line
@@ -78,15 +78,13 @@ extern struct rtas_t rtas;
extern struct lmb lmb;
extern struct lmb lmb;
extern unsigned long klimit;
extern unsigned long klimit;


static unsigned long memory_limit;

static int __initdata dt_root_addr_cells;
static int __initdata dt_root_addr_cells;
static int __initdata dt_root_size_cells;
static int __initdata dt_root_size_cells;


#ifdef CONFIG_PPC64
#ifdef CONFIG_PPC64
static int __initdata iommu_is_off;
static int __initdata iommu_is_off;
int __initdata iommu_force_on;
int __initdata iommu_force_on;
extern unsigned long tce_alloc_start, tce_alloc_end;
unsigned long tce_alloc_start, tce_alloc_end;
#endif
#endif


typedef u32 cell_t;
typedef u32 cell_t;
+0 −9
Original line number Original line Diff line number Diff line
@@ -631,15 +631,6 @@ static int ppc64_panic_event(struct notifier_block *this,
	return NOTIFY_DONE;
	return NOTIFY_DONE;
}
}


/*
 * These three variables are used to save values passed to us by prom_init()
 * via the device tree. The TCE variables are needed because with a memory_limit
 * in force we may need to explicitly map the TCE are at the top of RAM.
 */
unsigned long memory_limit;
unsigned long tce_alloc_start;
unsigned long tce_alloc_end;

#ifdef CONFIG_PPC_ISERIES
#ifdef CONFIG_PPC_ISERIES
/*
/*
 * On iSeries we just parse the mem=X option from the command line.
 * On iSeries we just parse the mem=X option from the command line.
+1 −0
Original line number Original line Diff line number Diff line
@@ -59,6 +59,7 @@


int init_bootmem_done;
int init_bootmem_done;
int mem_init_done;
int mem_init_done;
unsigned long memory_limit;


/*
/*
 * This is called by /dev/mem to know if a given address has to
 * This is called by /dev/mem to know if a given address has to
+1 −1
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@
#include <asm/lmb.h>
#include <asm/lmb.h>
#include <asm/machdep.h>
#include <asm/machdep.h>
#include <asm/abs_addr.h>
#include <asm/abs_addr.h>
#include <asm/system.h>


static int numa_enabled = 1;
static int numa_enabled = 1;


@@ -300,7 +301,6 @@ static unsigned long __init numa_enforce_memory_limit(unsigned long start, unsig
	 * we've already adjusted it for the limit and it takes care of
	 * we've already adjusted it for the limit and it takes care of
	 * having memory holes below the limit.
	 * having memory holes below the limit.
	 */
	 */
	extern unsigned long memory_limit;


	if (! memory_limit)
	if (! memory_limit)
		return size;
		return size;
+0 −2
Original line number Original line Diff line number Diff line
@@ -302,8 +302,6 @@ static void __init iSeries_get_cmdline(void)


static void __init iSeries_init_early(void)
static void __init iSeries_init_early(void)
{
{
	extern unsigned long memory_limit;

	DBG(" -> iSeries_init_early()\n");
	DBG(" -> iSeries_init_early()\n");


	ppc64_firmware_features = FW_FEATURE_ISERIES;
	ppc64_firmware_features = FW_FEATURE_ISERIES;
Loading