mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-24 13:44:26 -04:00
Merge branch 'akpm' (patches from Andrew)
Merge misc updates from Andrew Morton:
- a few misc things
- the rest of MM
- remove flex_arrays, replace with new simple radix-tree implementation
* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (38 commits)
Drop flex_arrays
sctp: convert to genradix
proc: commit to genradix
generic radix trees
selinux: convert to kvmalloc
md: convert to kvmalloc
openvswitch: convert to kvmalloc
of: fix kmemleak crash caused by imbalance in early memory reservation
mm: memblock: update comments and kernel-doc
memblock: split checks whether a region should be skipped to a helper function
memblock: remove memblock_{set,clear}_region_flags
memblock: drop memblock_alloc_*_nopanic() variants
memblock: memblock_alloc_try_nid: don't panic
treewide: add checks for the return value of memblock_alloc*()
swiotlb: add checks for the return value of memblock_alloc*()
init/main: add checks for the return value of memblock_alloc*()
mm/percpu: add checks for the return value of memblock_alloc*()
sparc: add checks for the return value of memblock_alloc*()
ia64: add checks for the return value of memblock_alloc*()
arch: don't memset(0) memory returned by memblock_alloc()
...
This commit is contained in:
commit
a667cb7a94
159 changed files with 1651 additions and 1707 deletions
|
|
@ -199,6 +199,7 @@ void __init swiotlb_update_mem_attributes(void)
|
|||
int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
|
||||
{
|
||||
unsigned long i, bytes;
|
||||
size_t alloc_size;
|
||||
|
||||
bytes = nslabs << IO_TLB_SHIFT;
|
||||
|
||||
|
|
@ -211,12 +212,18 @@ int __init swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose)
|
|||
* to find contiguous free memory regions of size up to IO_TLB_SEGSIZE
|
||||
* between io_tlb_start and io_tlb_end.
|
||||
*/
|
||||
io_tlb_list = memblock_alloc(
|
||||
PAGE_ALIGN(io_tlb_nslabs * sizeof(int)),
|
||||
PAGE_SIZE);
|
||||
io_tlb_orig_addr = memblock_alloc(
|
||||
PAGE_ALIGN(io_tlb_nslabs * sizeof(phys_addr_t)),
|
||||
PAGE_SIZE);
|
||||
alloc_size = PAGE_ALIGN(io_tlb_nslabs * sizeof(int));
|
||||
io_tlb_list = memblock_alloc(alloc_size, PAGE_SIZE);
|
||||
if (!io_tlb_list)
|
||||
panic("%s: Failed to allocate %zu bytes align=0x%lx\n",
|
||||
__func__, alloc_size, PAGE_SIZE);
|
||||
|
||||
alloc_size = PAGE_ALIGN(io_tlb_nslabs * sizeof(phys_addr_t));
|
||||
io_tlb_orig_addr = memblock_alloc(alloc_size, PAGE_SIZE);
|
||||
if (!io_tlb_orig_addr)
|
||||
panic("%s: Failed to allocate %zu bytes align=0x%lx\n",
|
||||
__func__, alloc_size, PAGE_SIZE);
|
||||
|
||||
for (i = 0; i < io_tlb_nslabs; i++) {
|
||||
io_tlb_list[i] = IO_TLB_SEGSIZE - OFFSET(i, IO_TLB_SEGSIZE);
|
||||
io_tlb_orig_addr[i] = INVALID_PHYS_ADDR;
|
||||
|
|
@ -249,7 +256,7 @@ swiotlb_init(int verbose)
|
|||
bytes = io_tlb_nslabs << IO_TLB_SHIFT;
|
||||
|
||||
/* Get IO TLB memory from the low pages */
|
||||
vstart = memblock_alloc_low_nopanic(PAGE_ALIGN(bytes), PAGE_SIZE);
|
||||
vstart = memblock_alloc_low(PAGE_ALIGN(bytes), PAGE_SIZE);
|
||||
if (vstart && !swiotlb_init_with_tbl(vstart, io_tlb_nslabs, verbose))
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -965,6 +965,9 @@ void __init __register_nosave_region(unsigned long start_pfn,
|
|||
/* This allocation cannot fail */
|
||||
region = memblock_alloc(sizeof(struct nosave_region),
|
||||
SMP_CACHE_BYTES);
|
||||
if (!region)
|
||||
panic("%s: Failed to allocate %zu bytes\n", __func__,
|
||||
sizeof(struct nosave_region));
|
||||
}
|
||||
region->start_pfn = start_pfn;
|
||||
region->end_pfn = end_pfn;
|
||||
|
|
|
|||
|
|
@ -1143,14 +1143,7 @@ void __init setup_log_buf(int early)
|
|||
if (!new_log_buf_len)
|
||||
return;
|
||||
|
||||
if (early) {
|
||||
new_log_buf =
|
||||
memblock_alloc(new_log_buf_len, LOG_ALIGN);
|
||||
} else {
|
||||
new_log_buf = memblock_alloc_nopanic(new_log_buf_len,
|
||||
LOG_ALIGN);
|
||||
}
|
||||
|
||||
new_log_buf = memblock_alloc(new_log_buf_len, LOG_ALIGN);
|
||||
if (unlikely(!new_log_buf)) {
|
||||
pr_err("log_buf_len: %lu bytes not available\n",
|
||||
new_log_buf_len);
|
||||
|
|
|
|||
|
|
@ -2643,23 +2643,25 @@ static int do_proc_dointvec_minmax_conv(bool *negp, unsigned long *lvalp,
|
|||
int *valp,
|
||||
int write, void *data)
|
||||
{
|
||||
int tmp, ret;
|
||||
struct do_proc_dointvec_minmax_conv_param *param = data;
|
||||
/*
|
||||
* If writing, first do so via a temporary local int so we can
|
||||
* bounds-check it before touching *valp.
|
||||
*/
|
||||
int *ip = write ? &tmp : valp;
|
||||
|
||||
ret = do_proc_dointvec_conv(negp, lvalp, ip, write, data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (write) {
|
||||
int val = *negp ? -*lvalp : *lvalp;
|
||||
if ((param->min && *param->min > val) ||
|
||||
(param->max && *param->max < val))
|
||||
if ((param->min && *param->min > tmp) ||
|
||||
(param->max && *param->max < tmp))
|
||||
return -EINVAL;
|
||||
*valp = val;
|
||||
} else {
|
||||
int val = *valp;
|
||||
if (val < 0) {
|
||||
*negp = true;
|
||||
*lvalp = -(unsigned long)val;
|
||||
} else {
|
||||
*negp = false;
|
||||
*lvalp = (unsigned long)val;
|
||||
}
|
||||
*valp = tmp;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -2708,22 +2710,22 @@ static int do_proc_douintvec_minmax_conv(unsigned long *lvalp,
|
|||
unsigned int *valp,
|
||||
int write, void *data)
|
||||
{
|
||||
int ret;
|
||||
unsigned int tmp;
|
||||
struct do_proc_douintvec_minmax_conv_param *param = data;
|
||||
/* write via temporary local uint for bounds-checking */
|
||||
unsigned int *up = write ? &tmp : valp;
|
||||
|
||||
ret = do_proc_douintvec_conv(lvalp, up, write, data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (write) {
|
||||
unsigned int val = *lvalp;
|
||||
|
||||
if (*lvalp > UINT_MAX)
|
||||
return -EINVAL;
|
||||
|
||||
if ((param->min && *param->min > val) ||
|
||||
(param->max && *param->max < val))
|
||||
if ((param->min && *param->min > tmp) ||
|
||||
(param->max && *param->max < tmp))
|
||||
return -ERANGE;
|
||||
|
||||
*valp = val;
|
||||
} else {
|
||||
unsigned int val = *valp;
|
||||
*lvalp = (unsigned long) val;
|
||||
*valp = tmp;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue