diff options
author | andrew <andrew@FreeBSD.org> | 2016-03-01 11:39:07 +0000 |
---|---|---|
committer | andrew <andrew@FreeBSD.org> | 2016-03-01 11:39:07 +0000 |
commit | f5009ab96f95675190ec64e737eee2590f029ad0 (patch) | |
tree | 68ccbeb72be10a34376c8e15fdaa34ec2818d2e8 | |
parent | fa1857f11586cb976c4962c4748f7b39cb3d96d2 (diff) | |
download | FreeBSD-src-f5009ab96f95675190ec64e737eee2590f029ad0.zip FreeBSD-src-f5009ab96f95675190ec64e737eee2590f029ad0.tar.gz |
Make the memory size returned from fdt_get_mem_regions a 64-bit type. This
is the physical memory size so may be larger than a u_long can hold, e.g.
on ARM with LPAE we could see an address space of up to 40 bits. On ARM
u_long is only 32 bits so the memory size will be truncated, possibly to
zero.
Reported by: bz
Sponsored by: ABT Systems Ltd
-rw-r--r-- | sys/arm/arm/machdep.c | 2 | ||||
-rw-r--r-- | sys/dev/fdt/fdt_common.c | 4 | ||||
-rw-r--r-- | sys/dev/fdt/fdt_common.h | 2 | ||||
-rw-r--r-- | sys/mips/beri/beri_machdep.c | 2 |
4 files changed, 5 insertions, 5 deletions
diff --git a/sys/arm/arm/machdep.c b/sys/arm/arm/machdep.c index e6e0e7f..e2310f1 100644 --- a/sys/arm/arm/machdep.c +++ b/sys/arm/arm/machdep.c @@ -1443,7 +1443,7 @@ initarm(struct arm_boot_params *abp) struct pv_addr kernel_l1pt; struct pv_addr dpcpu; vm_offset_t dtbp, freemempos, l2_start, lastaddr; - u_long memsize; + uint64_t memsize; uint32_t l2size; char *env; void *kmdp; diff --git a/sys/dev/fdt/fdt_common.c b/sys/dev/fdt/fdt_common.c index b435551..6211aca 100644 --- a/sys/dev/fdt/fdt_common.c +++ b/sys/dev/fdt/fdt_common.c @@ -647,12 +647,12 @@ out: } int -fdt_get_mem_regions(struct mem_region *mr, int *mrcnt, u_long *memsize) +fdt_get_mem_regions(struct mem_region *mr, int *mrcnt, uint64_t *memsize) { pcell_t reg[FDT_REG_CELLS * FDT_MEM_REGIONS]; pcell_t *regp; phandle_t memory; - u_long memory_size; + uint64_t memory_size; int addr_cells, size_cells; int i, max_size, reg_len, rv, tuple_size, tuples; diff --git a/sys/dev/fdt/fdt_common.h b/sys/dev/fdt/fdt_common.h index 278244e..db27b43 100644 --- a/sys/dev/fdt/fdt_common.h +++ b/sys/dev/fdt/fdt_common.h @@ -85,7 +85,7 @@ u_long fdt_data_get(void *, int); int fdt_data_to_res(pcell_t *, int, int, u_long *, u_long *); phandle_t fdt_find_compatible(phandle_t, const char *, int); phandle_t fdt_depth_search_compatible(phandle_t, const char *, int); -int fdt_get_mem_regions(struct mem_region *, int *, u_long *); +int fdt_get_mem_regions(struct mem_region *, int *, uint64_t *); int fdt_get_reserved_regions(struct mem_region *, int *); int fdt_get_phyaddr(phandle_t, device_t, int *, void **); int fdt_get_range(phandle_t, int, u_long *, u_long *); diff --git a/sys/mips/beri/beri_machdep.c b/sys/mips/beri/beri_machdep.c index 50d8b71..2c153e4 100644 --- a/sys/mips/beri/beri_machdep.c +++ b/sys/mips/beri/beri_machdep.c @@ -90,8 +90,8 @@ mips_init(void) int i; #ifdef FDT struct mem_region mr[FDT_MEM_REGIONS]; + uint64_t val; int mr_cnt; - u_long val; int j; #endif |