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 Diff line number Diff line
@@ -78,15 +78,13 @@ extern struct rtas_t rtas;
extern struct lmb lmb;
extern unsigned long klimit;

static unsigned long memory_limit;

static int __initdata dt_root_addr_cells;
static int __initdata dt_root_size_cells;

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

typedef u32 cell_t;
+0 −9
Original line number Diff line number Diff line
@@ -631,15 +631,6 @@ static int ppc64_panic_event(struct notifier_block *this,
	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
/*
 * On iSeries we just parse the mem=X option from the command line.
+1 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@

int init_bootmem_done;
int mem_init_done;
unsigned long memory_limit;

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

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
	 * having memory holes below the limit.
	 */
	extern unsigned long memory_limit;

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

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

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

	ppc64_firmware_features = FW_FEATURE_ISERIES;
Loading