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

Commit 1c4bc43d authored by Stefan Agner's avatar Stefan Agner Committed by Linus Torvalds
Browse files

mm/memblock: introduce PHYS_ADDR_MAX

So far code was using ULLONG_MAX and type casting to obtain a
phys_addr_t with all bits set.  The typecast is necessary to silence
compiler warnings on 32-bit platforms.

Use the simpler but still type safe approach "~(phys_addr_t)0" to create a
preprocessor define for all bits set.

Link: http://lkml.kernel.org/r/20180406213809.566-1-stefan@agner.ch


Signed-off-by: default avatarStefan Agner <stefan@agner.ch>
Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Acked-by: default avatarMichal Hocko <mhocko@suse.com>
Reviewed-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Pavel Tatashin <pasha.tatashin@oracle.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 00b3a331
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -29,6 +29,7 @@
#define LLONG_MIN	(-LLONG_MAX - 1)
#define LLONG_MIN	(-LLONG_MAX - 1)
#define ULLONG_MAX	(~0ULL)
#define ULLONG_MAX	(~0ULL)
#define SIZE_MAX	(~(size_t)0)
#define SIZE_MAX	(~(size_t)0)
#define PHYS_ADDR_MAX	(~(phys_addr_t)0)


#define U8_MAX		((u8)~0U)
#define U8_MAX		((u8)~0U)
#define S8_MAX		((s8)(U8_MAX>>1))
#define S8_MAX		((s8)(U8_MAX>>1))
+11 −11
Original line number Original line Diff line number Diff line
@@ -68,7 +68,7 @@ ulong __init_memblock choose_memblock_flags(void)
/* adjust *@size so that (@base + *@size) doesn't overflow, return new size */
/* adjust *@size so that (@base + *@size) doesn't overflow, return new size */
static inline phys_addr_t memblock_cap_size(phys_addr_t base, phys_addr_t *size)
static inline phys_addr_t memblock_cap_size(phys_addr_t base, phys_addr_t *size)
{
{
	return *size = min(*size, (phys_addr_t)ULLONG_MAX - base);
	return *size = min(*size, PHYS_ADDR_MAX - base);
}
}


/*
/*
@@ -925,7 +925,7 @@ void __init_memblock __next_mem_range(u64 *idx, int nid, ulong flags,
			r = &type_b->regions[idx_b];
			r = &type_b->regions[idx_b];
			r_start = idx_b ? r[-1].base + r[-1].size : 0;
			r_start = idx_b ? r[-1].base + r[-1].size : 0;
			r_end = idx_b < type_b->cnt ?
			r_end = idx_b < type_b->cnt ?
				r->base : (phys_addr_t)ULLONG_MAX;
				r->base : PHYS_ADDR_MAX;


			/*
			/*
			 * if idx_b advanced past idx_a,
			 * if idx_b advanced past idx_a,
@@ -1041,7 +1041,7 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags,
			r = &type_b->regions[idx_b];
			r = &type_b->regions[idx_b];
			r_start = idx_b ? r[-1].base + r[-1].size : 0;
			r_start = idx_b ? r[-1].base + r[-1].size : 0;
			r_end = idx_b < type_b->cnt ?
			r_end = idx_b < type_b->cnt ?
				r->base : (phys_addr_t)ULLONG_MAX;
				r->base : PHYS_ADDR_MAX;
			/*
			/*
			 * if idx_b advanced past idx_a,
			 * if idx_b advanced past idx_a,
			 * break out to advance idx_a
			 * break out to advance idx_a
@@ -1516,13 +1516,13 @@ phys_addr_t __init_memblock memblock_end_of_DRAM(void)


static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)
static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)
{
{
	phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX;
	phys_addr_t max_addr = PHYS_ADDR_MAX;
	struct memblock_region *r;
	struct memblock_region *r;


	/*
	/*
	 * translate the memory @limit size into the max address within one of
	 * translate the memory @limit size into the max address within one of
	 * the memory memblock regions, if the @limit exceeds the total size
	 * the memory memblock regions, if the @limit exceeds the total size
	 * of those regions, max_addr will keep original value ULLONG_MAX
	 * of those regions, max_addr will keep original value PHYS_ADDR_MAX
	 */
	 */
	for_each_memblock(memory, r) {
	for_each_memblock(memory, r) {
		if (limit <= r->size) {
		if (limit <= r->size) {
@@ -1537,7 +1537,7 @@ static phys_addr_t __init_memblock __find_max_addr(phys_addr_t limit)


void __init memblock_enforce_memory_limit(phys_addr_t limit)
void __init memblock_enforce_memory_limit(phys_addr_t limit)
{
{
	phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX;
	phys_addr_t max_addr = PHYS_ADDR_MAX;


	if (!limit)
	if (!limit)
		return;
		return;
@@ -1545,14 +1545,14 @@ void __init memblock_enforce_memory_limit(phys_addr_t limit)
	max_addr = __find_max_addr(limit);
	max_addr = __find_max_addr(limit);


	/* @limit exceeds the total size of the memory, do nothing */
	/* @limit exceeds the total size of the memory, do nothing */
	if (max_addr == (phys_addr_t)ULLONG_MAX)
	if (max_addr == PHYS_ADDR_MAX)
		return;
		return;


	/* truncate both memory and reserved regions */
	/* truncate both memory and reserved regions */
	memblock_remove_range(&memblock.memory, max_addr,
	memblock_remove_range(&memblock.memory, max_addr,
			      (phys_addr_t)ULLONG_MAX);
			      PHYS_ADDR_MAX);
	memblock_remove_range(&memblock.reserved, max_addr,
	memblock_remove_range(&memblock.reserved, max_addr,
			      (phys_addr_t)ULLONG_MAX);
			      PHYS_ADDR_MAX);
}
}


void __init memblock_cap_memory_range(phys_addr_t base, phys_addr_t size)
void __init memblock_cap_memory_range(phys_addr_t base, phys_addr_t size)
@@ -1580,7 +1580,7 @@ void __init memblock_cap_memory_range(phys_addr_t base, phys_addr_t size)
	/* truncate the reserved regions */
	/* truncate the reserved regions */
	memblock_remove_range(&memblock.reserved, 0, base);
	memblock_remove_range(&memblock.reserved, 0, base);
	memblock_remove_range(&memblock.reserved,
	memblock_remove_range(&memblock.reserved,
			base + size, (phys_addr_t)ULLONG_MAX);
			base + size, PHYS_ADDR_MAX);
}
}


void __init memblock_mem_limit_remove_map(phys_addr_t limit)
void __init memblock_mem_limit_remove_map(phys_addr_t limit)
@@ -1593,7 +1593,7 @@ void __init memblock_mem_limit_remove_map(phys_addr_t limit)
	max_addr = __find_max_addr(limit);
	max_addr = __find_max_addr(limit);


	/* @limit exceeds the total size of the memory, do nothing */
	/* @limit exceeds the total size of the memory, do nothing */
	if (max_addr == (phys_addr_t)ULLONG_MAX)
	if (max_addr == PHYS_ADDR_MAX)
		return;
		return;


	memblock_cap_memory_range(0, max_addr);
	memblock_cap_memory_range(0, max_addr);