forked from Minki/linux
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: Stefan Agner <stefan@agner.ch> Suggested-by: Linus Torvalds <torvalds@linux-foundation.org> Acked-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Andrew 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: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
00b3a331fd
commit
1c4bc43ddf
@ -29,6 +29,7 @@
|
||||
#define LLONG_MIN (-LLONG_MAX - 1)
|
||||
#define ULLONG_MAX (~0ULL)
|
||||
#define SIZE_MAX (~(size_t)0)
|
||||
#define PHYS_ADDR_MAX (~(phys_addr_t)0)
|
||||
|
||||
#define U8_MAX ((u8)~0U)
|
||||
#define S8_MAX ((s8)(U8_MAX>>1))
|
||||
|
@ -68,7 +68,7 @@ ulong __init_memblock choose_memblock_flags(void)
|
||||
/* 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)
|
||||
{
|
||||
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_start = idx_b ? r[-1].base + r[-1].size : 0;
|
||||
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,
|
||||
@ -1041,7 +1041,7 @@ void __init_memblock __next_mem_range_rev(u64 *idx, int nid, ulong flags,
|
||||
r = &type_b->regions[idx_b];
|
||||
r_start = idx_b ? r[-1].base + r[-1].size : 0;
|
||||
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,
|
||||
* 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)
|
||||
{
|
||||
phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX;
|
||||
phys_addr_t max_addr = PHYS_ADDR_MAX;
|
||||
struct memblock_region *r;
|
||||
|
||||
/*
|
||||
* translate the memory @limit size into the max address within one of
|
||||
* 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) {
|
||||
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)
|
||||
{
|
||||
phys_addr_t max_addr = (phys_addr_t)ULLONG_MAX;
|
||||
phys_addr_t max_addr = PHYS_ADDR_MAX;
|
||||
|
||||
if (!limit)
|
||||
return;
|
||||
@ -1545,14 +1545,14 @@ void __init memblock_enforce_memory_limit(phys_addr_t limit)
|
||||
max_addr = __find_max_addr(limit);
|
||||
|
||||
/* @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;
|
||||
|
||||
/* truncate both memory and reserved regions */
|
||||
memblock_remove_range(&memblock.memory, max_addr,
|
||||
(phys_addr_t)ULLONG_MAX);
|
||||
PHYS_ADDR_MAX);
|
||||
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)
|
||||
@ -1580,7 +1580,7 @@ void __init memblock_cap_memory_range(phys_addr_t base, phys_addr_t size)
|
||||
/* truncate the reserved regions */
|
||||
memblock_remove_range(&memblock.reserved, 0, base);
|
||||
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)
|
||||
@ -1593,7 +1593,7 @@ void __init memblock_mem_limit_remove_map(phys_addr_t limit)
|
||||
max_addr = __find_max_addr(limit);
|
||||
|
||||
/* @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;
|
||||
|
||||
memblock_cap_memory_range(0, max_addr);
|
||||
|
Loading…
Reference in New Issue
Block a user