Merge branch 'akpm' (patches from Andrew)
Merge misc fixes from Andrew Morton: "8 fixes" * emailed patches from Andrew Morton <akpm@linux-foundation.org>: MAINTAINERS: demote ARM port to "odd fixes" MAINTAINERS: correct rmk's email address mm/kmemleak.c: wait for scan completion before disabling free mm/memcontrol.c: fix parameter description mismatch mm/vmstat.c: fix vmstat_update() preemption BUG mm/page_owner: fix recursion bug after changing skip entries ipc/shm.c: add split function to shm_vm_ops mm, slab: memcg_link the SLAB's kmem_cache
This commit is contained in:
commit
68b8dffce6
32
MAINTAINERS
32
MAINTAINERS
|
@ -1060,41 +1060,42 @@ ARM PORT
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
W: http://www.armlinux.org.uk/
|
W: http://www.armlinux.org.uk/
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git
|
T: git git://git.armlinux.org.uk/~rmk/linux-arm.git
|
||||||
F: arch/arm/
|
F: arch/arm/
|
||||||
|
X: arch/arm/boot/dts/
|
||||||
|
|
||||||
ARM PRIMECELL AACI PL041 DRIVER
|
ARM PRIMECELL AACI PL041 DRIVER
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: sound/arm/aaci.*
|
F: sound/arm/aaci.*
|
||||||
|
|
||||||
ARM PRIMECELL BUS SUPPORT
|
ARM PRIMECELL BUS SUPPORT
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/amba/
|
F: drivers/amba/
|
||||||
F: include/linux/amba/bus.h
|
F: include/linux/amba/bus.h
|
||||||
|
|
||||||
ARM PRIMECELL CLCD PL110 DRIVER
|
ARM PRIMECELL CLCD PL110 DRIVER
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/video/fbdev/amba-clcd.*
|
F: drivers/video/fbdev/amba-clcd.*
|
||||||
|
|
||||||
ARM PRIMECELL KMI PL050 DRIVER
|
ARM PRIMECELL KMI PL050 DRIVER
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/input/serio/ambakmi.*
|
F: drivers/input/serio/ambakmi.*
|
||||||
F: include/linux/amba/kmi.h
|
F: include/linux/amba/kmi.h
|
||||||
|
|
||||||
ARM PRIMECELL MMCI PL180/1 DRIVER
|
ARM PRIMECELL MMCI PL180/1 DRIVER
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/mmc/host/mmci.*
|
F: drivers/mmc/host/mmci.*
|
||||||
F: include/linux/amba/mmci.h
|
F: include/linux/amba/mmci.h
|
||||||
|
|
||||||
ARM PRIMECELL UART PL010 AND PL011 DRIVERS
|
ARM PRIMECELL UART PL010 AND PL011 DRIVERS
|
||||||
M: Russell King <linux@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: drivers/tty/serial/amba-pl01*.c
|
F: drivers/tty/serial/amba-pl01*.c
|
||||||
F: include/linux/amba/serial.h
|
F: include/linux/amba/serial.h
|
||||||
|
|
||||||
|
@ -8434,7 +8435,7 @@ S: Orphan
|
||||||
F: drivers/net/wireless/marvell/libertas/
|
F: drivers/net/wireless/marvell/libertas/
|
||||||
|
|
||||||
MARVELL MACCHIATOBIN SUPPORT
|
MARVELL MACCHIATOBIN SUPPORT
|
||||||
M: Russell King <rmk@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
L: linux-arm-kernel@lists.infradead.org
|
L: linux-arm-kernel@lists.infradead.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
|
F: arch/arm64/boot/dts/marvell/armada-8040-mcbin.dts
|
||||||
|
@ -8447,7 +8448,7 @@ F: drivers/net/ethernet/marvell/mv643xx_eth.*
|
||||||
F: include/linux/mv643xx.h
|
F: include/linux/mv643xx.h
|
||||||
|
|
||||||
MARVELL MV88X3310 PHY DRIVER
|
MARVELL MV88X3310 PHY DRIVER
|
||||||
M: Russell King <rmk@armlinux.org.uk>
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/phy/marvell10g.c
|
F: drivers/net/phy/marvell10g.c
|
||||||
|
@ -12875,6 +12876,19 @@ S: Maintained
|
||||||
F: drivers/net/ethernet/socionext/netsec.c
|
F: drivers/net/ethernet/socionext/netsec.c
|
||||||
F: Documentation/devicetree/bindings/net/socionext-netsec.txt
|
F: Documentation/devicetree/bindings/net/socionext-netsec.txt
|
||||||
|
|
||||||
|
SOLIDRUN CLEARFOG SUPPORT
|
||||||
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/boot/dts/armada-388-clearfog*
|
||||||
|
F: arch/arm/boot/dts/armada-38x-solidrun-*
|
||||||
|
|
||||||
|
SOLIDRUN CUBOX-I/HUMMINGBOARD SUPPORT
|
||||||
|
M: Russell King <linux@armlinux.org.uk>
|
||||||
|
S: Maintained
|
||||||
|
F: arch/arm/boot/dts/imx6*-cubox-i*
|
||||||
|
F: arch/arm/boot/dts/imx6*-hummingboard*
|
||||||
|
F: arch/arm/boot/dts/imx6*-sr-*
|
||||||
|
|
||||||
SONIC NETWORK DRIVER
|
SONIC NETWORK DRIVER
|
||||||
M: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
M: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
|
|
12
ipc/shm.c
12
ipc/shm.c
|
@ -386,6 +386,17 @@ static int shm_fault(struct vm_fault *vmf)
|
||||||
return sfd->vm_ops->fault(vmf);
|
return sfd->vm_ops->fault(vmf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int shm_split(struct vm_area_struct *vma, unsigned long addr)
|
||||||
|
{
|
||||||
|
struct file *file = vma->vm_file;
|
||||||
|
struct shm_file_data *sfd = shm_file_data(file);
|
||||||
|
|
||||||
|
if (sfd->vm_ops && sfd->vm_ops->split)
|
||||||
|
return sfd->vm_ops->split(vma, addr);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
static int shm_set_policy(struct vm_area_struct *vma, struct mempolicy *new)
|
static int shm_set_policy(struct vm_area_struct *vma, struct mempolicy *new)
|
||||||
{
|
{
|
||||||
|
@ -510,6 +521,7 @@ static const struct vm_operations_struct shm_vm_ops = {
|
||||||
.open = shm_open, /* callback for a new vm-area open */
|
.open = shm_open, /* callback for a new vm-area open */
|
||||||
.close = shm_close, /* callback for when the vm-area is released */
|
.close = shm_close, /* callback for when the vm-area is released */
|
||||||
.fault = shm_fault,
|
.fault = shm_fault,
|
||||||
|
.split = shm_split,
|
||||||
#if defined(CONFIG_NUMA)
|
#if defined(CONFIG_NUMA)
|
||||||
.set_policy = shm_set_policy,
|
.set_policy = shm_set_policy,
|
||||||
.get_policy = shm_get_policy,
|
.get_policy = shm_get_policy,
|
||||||
|
|
|
@ -1657,8 +1657,7 @@ static void start_scan_thread(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Stop the automatic memory scanning thread. This function must be called
|
* Stop the automatic memory scanning thread.
|
||||||
* with the scan_mutex held.
|
|
||||||
*/
|
*/
|
||||||
static void stop_scan_thread(void)
|
static void stop_scan_thread(void)
|
||||||
{
|
{
|
||||||
|
@ -1921,12 +1920,15 @@ static void kmemleak_do_cleanup(struct work_struct *work)
|
||||||
{
|
{
|
||||||
stop_scan_thread();
|
stop_scan_thread();
|
||||||
|
|
||||||
|
mutex_lock(&scan_mutex);
|
||||||
/*
|
/*
|
||||||
* Once the scan thread has stopped, it is safe to no longer track
|
* Once it is made sure that kmemleak_scan has stopped, it is safe to no
|
||||||
* object freeing. Ordering of the scan thread stopping and the memory
|
* longer track object freeing. Ordering of the scan thread stopping and
|
||||||
* accesses below is guaranteed by the kthread_stop() function.
|
* the memory accesses below is guaranteed by the kthread_stop()
|
||||||
|
* function.
|
||||||
*/
|
*/
|
||||||
kmemleak_free_enabled = 0;
|
kmemleak_free_enabled = 0;
|
||||||
|
mutex_unlock(&scan_mutex);
|
||||||
|
|
||||||
if (!kmemleak_found_leaks)
|
if (!kmemleak_found_leaks)
|
||||||
__kmemleak_do_cleanup();
|
__kmemleak_do_cleanup();
|
||||||
|
|
|
@ -714,9 +714,9 @@ static struct mem_cgroup *get_mem_cgroup_from_mm(struct mm_struct *mm)
|
||||||
* invocations for reference counting, or use mem_cgroup_iter_break()
|
* invocations for reference counting, or use mem_cgroup_iter_break()
|
||||||
* to cancel a hierarchy walk before the round-trip is complete.
|
* to cancel a hierarchy walk before the round-trip is complete.
|
||||||
*
|
*
|
||||||
* Reclaimers can specify a zone and a priority level in @reclaim to
|
* Reclaimers can specify a node and a priority level in @reclaim to
|
||||||
* divide up the memcgs in the hierarchy among all concurrent
|
* divide up the memcgs in the hierarchy among all concurrent
|
||||||
* reclaimers operating on the same zone and priority.
|
* reclaimers operating on the same node and priority.
|
||||||
*/
|
*/
|
||||||
struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root,
|
struct mem_cgroup *mem_cgroup_iter(struct mem_cgroup *root,
|
||||||
struct mem_cgroup *prev,
|
struct mem_cgroup *prev,
|
||||||
|
@ -2299,7 +2299,7 @@ void memcg_kmem_put_cache(struct kmem_cache *cachep)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* memcg_kmem_charge: charge a kmem page
|
* memcg_kmem_charge_memcg: charge a kmem page
|
||||||
* @page: page to charge
|
* @page: page to charge
|
||||||
* @gfp: reclaim mode
|
* @gfp: reclaim mode
|
||||||
* @order: allocation order
|
* @order: allocation order
|
||||||
|
|
|
@ -123,13 +123,13 @@ void __reset_page_owner(struct page *page, unsigned int order)
|
||||||
static inline bool check_recursive_alloc(struct stack_trace *trace,
|
static inline bool check_recursive_alloc(struct stack_trace *trace,
|
||||||
unsigned long ip)
|
unsigned long ip)
|
||||||
{
|
{
|
||||||
int i, count;
|
int i;
|
||||||
|
|
||||||
if (!trace->nr_entries)
|
if (!trace->nr_entries)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (i = 0, count = 0; i < trace->nr_entries; i++) {
|
for (i = 0; i < trace->nr_entries; i++) {
|
||||||
if (trace->entries[i] == ip && ++count == 2)
|
if (trace->entries[i] == ip)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1283,6 +1283,7 @@ void __init kmem_cache_init(void)
|
||||||
nr_node_ids * sizeof(struct kmem_cache_node *),
|
nr_node_ids * sizeof(struct kmem_cache_node *),
|
||||||
SLAB_HWCACHE_ALIGN, 0, 0);
|
SLAB_HWCACHE_ALIGN, 0, 0);
|
||||||
list_add(&kmem_cache->list, &slab_caches);
|
list_add(&kmem_cache->list, &slab_caches);
|
||||||
|
memcg_link_cache(kmem_cache);
|
||||||
slab_state = PARTIAL;
|
slab_state = PARTIAL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1839,9 +1839,11 @@ static void vmstat_update(struct work_struct *w)
|
||||||
* to occur in the future. Keep on running the
|
* to occur in the future. Keep on running the
|
||||||
* update worker thread.
|
* update worker thread.
|
||||||
*/
|
*/
|
||||||
|
preempt_disable();
|
||||||
queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,
|
queue_delayed_work_on(smp_processor_id(), mm_percpu_wq,
|
||||||
this_cpu_ptr(&vmstat_work),
|
this_cpu_ptr(&vmstat_work),
|
||||||
round_jiffies_relative(sysctl_stat_interval));
|
round_jiffies_relative(sysctl_stat_interval));
|
||||||
|
preempt_enable();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue