Merge branch 'akpm' (patches from Andrew Morton)
Merge random fixes from Andrew Morton: "Random fixes. I have one batch remaining for -rc1, mainly zram changes which await a merge of Jens's trees" * emailed patches fron Andrew Morton akpm@linux-foundation.org>: MAINTAINERS: ADI Linux development mailing lists: change to the new server Documentation: fix multiple typo occurences s/KenelVersion/KernelVersion/ dma-debug: fix overlap detection memblock: add limit checking to memblock_virt_alloc mm/readahead.c: fix do_readahead() for no readpage(s) mm/slub.c: do not VM_BUG_ON_PAGE() for temporary on-stack pages slab: fix wrong retval on kmem_cache_create_memcg error path s390/compat: change parameter types from unsigned long to compat_ulong_t fs/compat: fix lookup_dcookie() parameter handling fs/compat: fix parameter handling for compat readv/writev syscalls mm/mempolicy.c: convert to pr_foo() mm: numa: initialise numa balancing after jump label initialisation mm/page-writeback.c: do not count anon pages as dirtyable memory mm/page-writeback.c: fix dirty_balance_reserve subtraction from dirtyable memory mm: document improved handling of swappiness==0 lib/genalloc.c: add check gen_pool_dma_alloc() if dma pointer is not NULL
This commit is contained in:
commit
13293115d1
|
@ -1,13 +1,13 @@
|
|||
What: /config/usb-gadget
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
This group contains sub-groups corresponding to created
|
||||
USB gadgets.
|
||||
|
||||
What: /config/usb-gadget/gadget
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
|
||||
The attributes of a gadget:
|
||||
|
@ -27,7 +27,7 @@ Description:
|
|||
|
||||
What: /config/usb-gadget/gadget/configs
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
This group contains a USB gadget's configurations
|
||||
|
||||
|
@ -58,20 +58,20 @@ Description:
|
|||
|
||||
What: /config/usb-gadget/gadget/functions
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
This group contains functions available to this USB gadget.
|
||||
|
||||
What: /config/usb-gadget/gadget/strings
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
This group contains subdirectories for language-specific
|
||||
strings for this gadget.
|
||||
|
||||
What: /config/usb-gadget/gadget/strings/language
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/acm.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: port_num.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/ecm.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/eem.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/ffs.name
|
||||
Date: Nov 2013
|
||||
KenelVersion: 3.13
|
||||
KernelVersion: 3.13
|
||||
Description: The purpose of this directory is to create and remove it.
|
||||
|
||||
A corresponding USB function instance is created/removed.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/Loopback.name
|
||||
Date: Nov 2013
|
||||
KenelVersion: 3.13
|
||||
KernelVersion: 3.13
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/mass_storage.name
|
||||
Date: Oct 2013
|
||||
KenelVersion: 3.13
|
||||
KernelVersion: 3.13
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
@ -13,7 +13,7 @@ Description:
|
|||
|
||||
What: /config/usb-gadget/gadget/functions/mass_storage.name/lun.name
|
||||
Date: Oct 2013
|
||||
KenelVersion: 3.13
|
||||
KernelVersion: 3.13
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/ncm.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/obex.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: port_num.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/phonet.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: ifname.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/rndis.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/gser.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
|
||||
This item contains just one readonly attribute: port_num.
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/SourceSink.name
|
||||
Date: Nov 2013
|
||||
KenelVersion: 3.13
|
||||
KernelVersion: 3.13
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
What: /config/usb-gadget/gadget/functions/geth.name
|
||||
Date: Jun 2013
|
||||
KenelVersion: 3.11
|
||||
KernelVersion: 3.11
|
||||
Description:
|
||||
The attributes:
|
||||
|
||||
|
|
|
@ -696,7 +696,9 @@ swappiness
|
|||
|
||||
This control is used to define how aggressive the kernel will swap
|
||||
memory pages. Higher values will increase agressiveness, lower values
|
||||
decrease the amount of swap.
|
||||
decrease the amount of swap. A value of 0 instructs the kernel not to
|
||||
initiate swap until the amount of free and file-backed pages is less
|
||||
than the high water mark in a zone.
|
||||
|
||||
The default value is 60.
|
||||
|
||||
|
|
42
MAINTAINERS
42
MAINTAINERS
|
@ -309,36 +309,36 @@ F: sound/pci/ad1889.*
|
|||
|
||||
AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/AD5254
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/misc/ad525x_dpot.c
|
||||
|
||||
AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/AD5398
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/regulator/ad5398.c
|
||||
|
||||
AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/AD7142
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/input/misc/ad714x.c
|
||||
|
||||
AD7877 TOUCHSCREEN DRIVER
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/AD7877
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/input/touchscreen/ad7877.c
|
||||
|
||||
AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/AD7879
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/input/touchscreen/ad7879.c
|
||||
|
||||
|
@ -374,8 +374,8 @@ F: include/media/adp1653.h
|
|||
|
||||
ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/ADP5520
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/mfd/adp5520.c
|
||||
F: drivers/video/backlight/adp5520_bl.c
|
||||
|
@ -385,16 +385,16 @@ F: drivers/input/keyboard/adp5520-keys.c
|
|||
|
||||
ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/ADP5588
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/input/keyboard/adp5588-keys.c
|
||||
F: drivers/gpio/gpio-adp5588.c
|
||||
|
||||
ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/ADP8860
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/video/backlight/adp8860_bl.c
|
||||
|
||||
|
@ -420,8 +420,8 @@ F: drivers/hwmon/adt7475.c
|
|||
|
||||
ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
|
||||
M: Michael Hennerich <michael.hennerich@analog.com>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
W: http://wiki.analog.com/ADXL345
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: drivers/input/misc/adxl34x.c
|
||||
|
||||
|
@ -627,9 +627,9 @@ F: drivers/media/i2c/adv7842*
|
|||
|
||||
ANALOG DEVICES INC ASOC CODEC DRIVERS
|
||||
M: Lars-Peter Clausen <lars@metafoo.de>
|
||||
L: device-drivers-devel@blackfin.uclinux.org
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
W: http://wiki.analog.com/
|
||||
W: http://ez.analog.com/community/linux-device-drivers
|
||||
S: Supported
|
||||
F: sound/soc/codecs/adau*
|
||||
F: sound/soc/codecs/adav*
|
||||
|
@ -639,7 +639,7 @@ F: sound/soc/codecs/ssm*
|
|||
F: sound/soc/codecs/sigmadsp.*
|
||||
|
||||
ANALOG DEVICES INC ASOC DRIVERS
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
W: http://blackfin.uclinux.org/
|
||||
S: Supported
|
||||
|
@ -1742,56 +1742,54 @@ F: fs/bfs/
|
|||
F: include/uapi/linux/bfs_fs.h
|
||||
|
||||
BLACKFIN ARCHITECTURE
|
||||
M: Mike Frysinger <vapier@gentoo.org>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
M: Steven Miao <realmz6@gmail.com>
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: arch/blackfin/
|
||||
|
||||
BLACKFIN EMAC DRIVER
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/net/ethernet/adi/
|
||||
|
||||
BLACKFIN RTC DRIVER
|
||||
M: Mike Frysinger <vapier.adi@gmail.com>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/rtc/rtc-bfin.c
|
||||
|
||||
BLACKFIN SDH DRIVER
|
||||
M: Sonic Zhang <sonic.zhang@analog.com>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/mmc/host/bfin_sdh.c
|
||||
|
||||
BLACKFIN SERIAL DRIVER
|
||||
M: Sonic Zhang <sonic.zhang@analog.com>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/tty/serial/bfin_uart.c
|
||||
|
||||
BLACKFIN WATCHDOG DRIVER
|
||||
M: Mike Frysinger <vapier.adi@gmail.com>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org
|
||||
S: Supported
|
||||
F: drivers/watchdog/bfin_wdt.c
|
||||
|
||||
BLACKFIN I2C TWI DRIVER
|
||||
M: Sonic Zhang <sonic.zhang@analog.com>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org/
|
||||
S: Supported
|
||||
F: drivers/i2c/busses/i2c-bfin-twi.c
|
||||
|
||||
BLACKFIN MEDIA DRIVER
|
||||
M: Scott Jiang <scott.jiang.linux@gmail.com>
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: adi-buildroot-devel@lists.sourceforge.net
|
||||
W: http://blackfin.uclinux.org/
|
||||
S: Supported
|
||||
F: drivers/media/platform/blackfin/
|
||||
|
|
|
@ -286,8 +286,8 @@ asmlinkage long sys32_getegid16(void)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_SYSVIPC
|
||||
COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second,
|
||||
unsigned long, third, compat_uptr_t, ptr)
|
||||
COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, compat_ulong_t, second,
|
||||
compat_ulong_t, third, compat_uptr_t, ptr)
|
||||
{
|
||||
if (call >> 16) /* hack for backward compatibility */
|
||||
return -EINVAL;
|
||||
|
|
|
@ -204,7 +204,7 @@ out:
|
|||
}
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, size_t, len)
|
||||
COMPAT_SYSCALL_DEFINE4(lookup_dcookie, u32, w0, u32, w1, char __user *, buf, compat_size_t, len)
|
||||
{
|
||||
#ifdef __BIG_ENDIAN
|
||||
return sys_lookup_dcookie(((u64)w0 << 32) | w1, buf, len);
|
||||
|
|
|
@ -964,9 +964,9 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE3(readv, unsigned long, fd,
|
||||
COMPAT_SYSCALL_DEFINE3(readv, compat_ulong_t, fd,
|
||||
const struct compat_iovec __user *,vec,
|
||||
unsigned long, vlen)
|
||||
compat_ulong_t, vlen)
|
||||
{
|
||||
struct fd f = fdget(fd);
|
||||
ssize_t ret;
|
||||
|
@ -1001,9 +1001,9 @@ COMPAT_SYSCALL_DEFINE4(preadv64, unsigned long, fd,
|
|||
return ret;
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE5(preadv, unsigned long, fd,
|
||||
COMPAT_SYSCALL_DEFINE5(preadv, compat_ulong_t, fd,
|
||||
const struct compat_iovec __user *,vec,
|
||||
unsigned long, vlen, u32, pos_low, u32, pos_high)
|
||||
compat_ulong_t, vlen, u32, pos_low, u32, pos_high)
|
||||
{
|
||||
loff_t pos = ((loff_t)pos_high << 32) | pos_low;
|
||||
return compat_sys_preadv64(fd, vec, vlen, pos);
|
||||
|
@ -1031,9 +1031,9 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE3(writev, unsigned long, fd,
|
||||
COMPAT_SYSCALL_DEFINE3(writev, compat_ulong_t, fd,
|
||||
const struct compat_iovec __user *, vec,
|
||||
unsigned long, vlen)
|
||||
compat_ulong_t, vlen)
|
||||
{
|
||||
struct fd f = fdget(fd);
|
||||
ssize_t ret;
|
||||
|
@ -1068,9 +1068,9 @@ COMPAT_SYSCALL_DEFINE4(pwritev64, unsigned long, fd,
|
|||
return ret;
|
||||
}
|
||||
|
||||
COMPAT_SYSCALL_DEFINE5(pwritev, unsigned long, fd,
|
||||
COMPAT_SYSCALL_DEFINE5(pwritev, compat_ulong_t, fd,
|
||||
const struct compat_iovec __user *,vec,
|
||||
unsigned long, vlen, u32, pos_low, u32, pos_high)
|
||||
compat_ulong_t, vlen, u32, pos_low, u32, pos_high)
|
||||
{
|
||||
loff_t pos = ((loff_t)pos_high << 32) | pos_low;
|
||||
return compat_sys_pwritev64(fd, vec, vlen, pos);
|
||||
|
|
|
@ -327,16 +327,16 @@ asmlinkage long compat_sys_keyctl(u32 option,
|
|||
u32 arg2, u32 arg3, u32 arg4, u32 arg5);
|
||||
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
|
||||
|
||||
asmlinkage ssize_t compat_sys_readv(unsigned long fd,
|
||||
const struct compat_iovec __user *vec, unsigned long vlen);
|
||||
asmlinkage ssize_t compat_sys_writev(unsigned long fd,
|
||||
const struct compat_iovec __user *vec, unsigned long vlen);
|
||||
asmlinkage ssize_t compat_sys_preadv(unsigned long fd,
|
||||
asmlinkage ssize_t compat_sys_readv(compat_ulong_t fd,
|
||||
const struct compat_iovec __user *vec, compat_ulong_t vlen);
|
||||
asmlinkage ssize_t compat_sys_writev(compat_ulong_t fd,
|
||||
const struct compat_iovec __user *vec, compat_ulong_t vlen);
|
||||
asmlinkage ssize_t compat_sys_preadv(compat_ulong_t fd,
|
||||
const struct compat_iovec __user *vec,
|
||||
unsigned long vlen, u32 pos_low, u32 pos_high);
|
||||
asmlinkage ssize_t compat_sys_pwritev(unsigned long fd,
|
||||
compat_ulong_t vlen, u32 pos_low, u32 pos_high);
|
||||
asmlinkage ssize_t compat_sys_pwritev(compat_ulong_t fd,
|
||||
const struct compat_iovec __user *vec,
|
||||
unsigned long vlen, u32 pos_low, u32 pos_high);
|
||||
compat_ulong_t vlen, u32 pos_low, u32 pos_high);
|
||||
asmlinkage long comat_sys_lseek(unsigned int, compat_off_t, unsigned int);
|
||||
|
||||
asmlinkage long compat_sys_execve(const char __user *filename, const compat_uptr_t __user *argv,
|
||||
|
@ -422,7 +422,7 @@ extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
|||
asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
|
||||
compat_long_t addr, compat_long_t data);
|
||||
|
||||
asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, size_t);
|
||||
asmlinkage long compat_sys_lookup_dcookie(u32, u32, char __user *, compat_size_t);
|
||||
/*
|
||||
* epoll (fs/eventpoll.c) compat bits follow ...
|
||||
*/
|
||||
|
|
|
@ -142,8 +142,6 @@ static inline unsigned long zone_page_state_snapshot(struct zone *zone,
|
|||
return x;
|
||||
}
|
||||
|
||||
extern unsigned long global_reclaimable_pages(void);
|
||||
|
||||
#ifdef CONFIG_NUMA
|
||||
/*
|
||||
* Determine the per node value of a stat item. This function
|
||||
|
|
|
@ -463,7 +463,7 @@ static int active_pfn_set_overlap(unsigned long pfn, int overlap)
|
|||
int i;
|
||||
|
||||
if (overlap > ACTIVE_PFN_MAX_OVERLAP || overlap < 0)
|
||||
return 0;
|
||||
return overlap;
|
||||
|
||||
for (i = RADIX_TREE_MAX_TAGS - 1; i >= 0; i--)
|
||||
if (overlap & 1 << i)
|
||||
|
@ -486,7 +486,7 @@ static void active_pfn_inc_overlap(unsigned long pfn)
|
|||
* debug_dma_assert_idle() as the pfn may be marked idle
|
||||
* prematurely.
|
||||
*/
|
||||
WARN_ONCE(overlap == 0,
|
||||
WARN_ONCE(overlap > ACTIVE_PFN_MAX_OVERLAP,
|
||||
"DMA-API: exceeded %d overlapping mappings of pfn %lx\n",
|
||||
ACTIVE_PFN_MAX_OVERLAP, pfn);
|
||||
}
|
||||
|
@ -517,7 +517,11 @@ static void active_pfn_remove(struct dma_debug_entry *entry)
|
|||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&radix_lock, flags);
|
||||
if (active_pfn_dec_overlap(entry->pfn) == 0)
|
||||
/* since we are counting overlaps the final put of the
|
||||
* entry->pfn will occur when the overlap count is 0.
|
||||
* active_pfn_dec_overlap() returns -1 in that case
|
||||
*/
|
||||
if (active_pfn_dec_overlap(entry->pfn) < 0)
|
||||
radix_tree_delete(&dma_active_pfn, entry->pfn);
|
||||
spin_unlock_irqrestore(&radix_lock, flags);
|
||||
}
|
||||
|
|
|
@ -316,7 +316,7 @@ EXPORT_SYMBOL(gen_pool_alloc);
|
|||
* gen_pool_dma_alloc - allocate special memory from the pool for DMA usage
|
||||
* @pool: pool to allocate from
|
||||
* @size: number of bytes to allocate from the pool
|
||||
* @dma: dma-view physical address
|
||||
* @dma: dma-view physical address return value. Use NULL if unneeded.
|
||||
*
|
||||
* Allocate the requested number of bytes from the specified pool.
|
||||
* Uses the pool allocation function (with first-fit algorithm by default).
|
||||
|
@ -334,7 +334,8 @@ void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size, dma_addr_t *dma)
|
|||
if (!vaddr)
|
||||
return NULL;
|
||||
|
||||
*dma = gen_pool_virt_to_phys(pool, vaddr);
|
||||
if (dma)
|
||||
*dma = gen_pool_virt_to_phys(pool, vaddr);
|
||||
|
||||
return (void *)vaddr;
|
||||
}
|
||||
|
|
|
@ -83,7 +83,6 @@ extern unsigned long highest_memmap_pfn;
|
|||
*/
|
||||
extern int isolate_lru_page(struct page *page);
|
||||
extern void putback_lru_page(struct page *page);
|
||||
extern unsigned long zone_reclaimable_pages(struct zone *zone);
|
||||
extern bool zone_reclaimable(struct zone *zone);
|
||||
|
||||
/*
|
||||
|
|
|
@ -1077,6 +1077,9 @@ static void * __init memblock_virt_alloc_internal(
|
|||
if (!align)
|
||||
align = SMP_CACHE_BYTES;
|
||||
|
||||
if (max_addr > memblock.current_limit)
|
||||
max_addr = memblock.current_limit;
|
||||
|
||||
again:
|
||||
alloc = memblock_find_in_range_node(size, align, min_addr, max_addr,
|
||||
nid);
|
||||
|
|
|
@ -2654,7 +2654,7 @@ void mpol_free_shared_policy(struct shared_policy *p)
|
|||
}
|
||||
|
||||
#ifdef CONFIG_NUMA_BALANCING
|
||||
static bool __initdata numabalancing_override;
|
||||
static int __initdata numabalancing_override;
|
||||
|
||||
static void __init check_numabalancing_enable(void)
|
||||
{
|
||||
|
@ -2663,9 +2663,15 @@ static void __init check_numabalancing_enable(void)
|
|||
if (IS_ENABLED(CONFIG_NUMA_BALANCING_DEFAULT_ENABLED))
|
||||
numabalancing_default = true;
|
||||
|
||||
/* Parsed by setup_numabalancing. override == 1 enables, -1 disables */
|
||||
if (numabalancing_override)
|
||||
set_numabalancing_state(numabalancing_override == 1);
|
||||
|
||||
if (nr_node_ids > 1 && !numabalancing_override) {
|
||||
printk(KERN_INFO "Enabling automatic NUMA balancing. "
|
||||
"Configure with numa_balancing= or the kernel.numa_balancing sysctl");
|
||||
pr_info("%s automatic NUMA balancing. "
|
||||
"Configure with numa_balancing= or the "
|
||||
"kernel.numa_balancing sysctl",
|
||||
numabalancing_default ? "Enabling" : "Disabling");
|
||||
set_numabalancing_state(numabalancing_default);
|
||||
}
|
||||
}
|
||||
|
@ -2675,18 +2681,17 @@ static int __init setup_numabalancing(char *str)
|
|||
int ret = 0;
|
||||
if (!str)
|
||||
goto out;
|
||||
numabalancing_override = true;
|
||||
|
||||
if (!strcmp(str, "enable")) {
|
||||
set_numabalancing_state(true);
|
||||
numabalancing_override = 1;
|
||||
ret = 1;
|
||||
} else if (!strcmp(str, "disable")) {
|
||||
set_numabalancing_state(false);
|
||||
numabalancing_override = -1;
|
||||
ret = 1;
|
||||
}
|
||||
out:
|
||||
if (!ret)
|
||||
printk(KERN_WARNING "Unable to parse numa_balancing=\n");
|
||||
pr_warn("Unable to parse numa_balancing=\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -191,6 +191,26 @@ static unsigned long writeout_period_time = 0;
|
|||
* global dirtyable memory first.
|
||||
*/
|
||||
|
||||
/**
|
||||
* zone_dirtyable_memory - number of dirtyable pages in a zone
|
||||
* @zone: the zone
|
||||
*
|
||||
* Returns the zone's number of pages potentially available for dirty
|
||||
* page cache. This is the base value for the per-zone dirty limits.
|
||||
*/
|
||||
static unsigned long zone_dirtyable_memory(struct zone *zone)
|
||||
{
|
||||
unsigned long nr_pages;
|
||||
|
||||
nr_pages = zone_page_state(zone, NR_FREE_PAGES);
|
||||
nr_pages -= min(nr_pages, zone->dirty_balance_reserve);
|
||||
|
||||
nr_pages += zone_page_state(zone, NR_INACTIVE_FILE);
|
||||
nr_pages += zone_page_state(zone, NR_ACTIVE_FILE);
|
||||
|
||||
return nr_pages;
|
||||
}
|
||||
|
||||
static unsigned long highmem_dirtyable_memory(unsigned long total)
|
||||
{
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
|
@ -198,11 +218,9 @@ static unsigned long highmem_dirtyable_memory(unsigned long total)
|
|||
unsigned long x = 0;
|
||||
|
||||
for_each_node_state(node, N_HIGH_MEMORY) {
|
||||
struct zone *z =
|
||||
&NODE_DATA(node)->node_zones[ZONE_HIGHMEM];
|
||||
struct zone *z = &NODE_DATA(node)->node_zones[ZONE_HIGHMEM];
|
||||
|
||||
x += zone_page_state(z, NR_FREE_PAGES) +
|
||||
zone_reclaimable_pages(z) - z->dirty_balance_reserve;
|
||||
x += zone_dirtyable_memory(z);
|
||||
}
|
||||
/*
|
||||
* Unreclaimable memory (kernel memory or anonymous memory
|
||||
|
@ -238,9 +256,12 @@ static unsigned long global_dirtyable_memory(void)
|
|||
{
|
||||
unsigned long x;
|
||||
|
||||
x = global_page_state(NR_FREE_PAGES) + global_reclaimable_pages();
|
||||
x = global_page_state(NR_FREE_PAGES);
|
||||
x -= min(x, dirty_balance_reserve);
|
||||
|
||||
x += global_page_state(NR_INACTIVE_FILE);
|
||||
x += global_page_state(NR_ACTIVE_FILE);
|
||||
|
||||
if (!vm_highmem_is_dirtyable)
|
||||
x -= highmem_dirtyable_memory(x);
|
||||
|
||||
|
@ -288,32 +309,6 @@ void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty)
|
|||
trace_global_dirty_state(background, dirty);
|
||||
}
|
||||
|
||||
/**
|
||||
* zone_dirtyable_memory - number of dirtyable pages in a zone
|
||||
* @zone: the zone
|
||||
*
|
||||
* Returns the zone's number of pages potentially available for dirty
|
||||
* page cache. This is the base value for the per-zone dirty limits.
|
||||
*/
|
||||
static unsigned long zone_dirtyable_memory(struct zone *zone)
|
||||
{
|
||||
/*
|
||||
* The effective global number of dirtyable pages may exclude
|
||||
* highmem as a big-picture measure to keep the ratio between
|
||||
* dirty memory and lowmem reasonable.
|
||||
*
|
||||
* But this function is purely about the individual zone and a
|
||||
* highmem zone can hold its share of dirty pages, so we don't
|
||||
* care about vm_highmem_is_dirtyable here.
|
||||
*/
|
||||
unsigned long nr_pages = zone_page_state(zone, NR_FREE_PAGES) +
|
||||
zone_reclaimable_pages(zone);
|
||||
|
||||
/* don't allow this to underflow */
|
||||
nr_pages -= min(nr_pages, zone->dirty_balance_reserve);
|
||||
return nr_pages;
|
||||
}
|
||||
|
||||
/**
|
||||
* zone_dirty_limit - maximum number of dirty pages allowed in a zone
|
||||
* @zone: the zone
|
||||
|
|
|
@ -211,8 +211,6 @@ out:
|
|||
int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
|
||||
pgoff_t offset, unsigned long nr_to_read)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages))
|
||||
return -EINVAL;
|
||||
|
||||
|
@ -226,15 +224,13 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
|
|||
this_chunk = nr_to_read;
|
||||
err = __do_page_cache_readahead(mapping, filp,
|
||||
offset, this_chunk, 0);
|
||||
if (err < 0) {
|
||||
ret = err;
|
||||
break;
|
||||
}
|
||||
ret += err;
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
offset += this_chunk;
|
||||
nr_to_read -= this_chunk;
|
||||
}
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -576,8 +572,7 @@ do_readahead(struct address_space *mapping, struct file *filp,
|
|||
if (!mapping || !mapping->a_ops)
|
||||
return -EINVAL;
|
||||
|
||||
force_page_cache_readahead(mapping, filp, index, nr);
|
||||
return 0;
|
||||
return force_page_cache_readahead(mapping, filp, index, nr);
|
||||
}
|
||||
|
||||
SYSCALL_DEFINE3(readahead, int, fd, loff_t, offset, size_t, count)
|
||||
|
|
|
@ -233,14 +233,17 @@ out_unlock:
|
|||
mutex_unlock(&slab_mutex);
|
||||
put_online_cpus();
|
||||
|
||||
/*
|
||||
* There is no point in flooding logs with warnings or especially
|
||||
* crashing the system if we fail to create a cache for a memcg. In
|
||||
* this case we will be accounting the memcg allocation to the root
|
||||
* cgroup until we succeed to create its own cache, but it isn't that
|
||||
* critical.
|
||||
*/
|
||||
if (err && !memcg) {
|
||||
if (err) {
|
||||
/*
|
||||
* There is no point in flooding logs with warnings or
|
||||
* especially crashing the system if we fail to create a cache
|
||||
* for a memcg. In this case we will be accounting the memcg
|
||||
* allocation to the root cgroup until we succeed to create its
|
||||
* own cache, but it isn't that critical.
|
||||
*/
|
||||
if (!memcg)
|
||||
return NULL;
|
||||
|
||||
if (flags & SLAB_PANIC)
|
||||
panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n",
|
||||
name, err);
|
||||
|
|
12
mm/slub.c
12
mm/slub.c
|
@ -1559,7 +1559,7 @@ static inline void *acquire_slab(struct kmem_cache *s,
|
|||
new.freelist = freelist;
|
||||
}
|
||||
|
||||
VM_BUG_ON_PAGE(new.frozen, &new);
|
||||
VM_BUG_ON(new.frozen);
|
||||
new.frozen = 1;
|
||||
|
||||
if (!__cmpxchg_double_slab(s, page,
|
||||
|
@ -1812,7 +1812,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page,
|
|||
set_freepointer(s, freelist, prior);
|
||||
new.counters = counters;
|
||||
new.inuse--;
|
||||
VM_BUG_ON_PAGE(!new.frozen, &new);
|
||||
VM_BUG_ON(!new.frozen);
|
||||
|
||||
} while (!__cmpxchg_double_slab(s, page,
|
||||
prior, counters,
|
||||
|
@ -1840,7 +1840,7 @@ redo:
|
|||
|
||||
old.freelist = page->freelist;
|
||||
old.counters = page->counters;
|
||||
VM_BUG_ON_PAGE(!old.frozen, &old);
|
||||
VM_BUG_ON(!old.frozen);
|
||||
|
||||
/* Determine target state of the slab */
|
||||
new.counters = old.counters;
|
||||
|
@ -1952,7 +1952,7 @@ static void unfreeze_partials(struct kmem_cache *s,
|
|||
|
||||
old.freelist = page->freelist;
|
||||
old.counters = page->counters;
|
||||
VM_BUG_ON_PAGE(!old.frozen, &old);
|
||||
VM_BUG_ON(!old.frozen);
|
||||
|
||||
new.counters = old.counters;
|
||||
new.freelist = old.freelist;
|
||||
|
@ -2225,7 +2225,7 @@ static inline void *get_freelist(struct kmem_cache *s, struct page *page)
|
|||
counters = page->counters;
|
||||
|
||||
new.counters = counters;
|
||||
VM_BUG_ON_PAGE(!new.frozen, &new);
|
||||
VM_BUG_ON(!new.frozen);
|
||||
|
||||
new.inuse = page->objects;
|
||||
new.frozen = freelist != NULL;
|
||||
|
@ -2319,7 +2319,7 @@ load_freelist:
|
|||
* page is pointing to the page from which the objects are obtained.
|
||||
* That page must be frozen for per cpu allocations to work.
|
||||
*/
|
||||
VM_BUG_ON_PAGE(!c->page->frozen, c->page);
|
||||
VM_BUG_ON(!c->page->frozen);
|
||||
c->freelist = get_freepointer(s, freelist);
|
||||
c->tid = next_tid(c->tid);
|
||||
local_irq_restore(flags);
|
||||
|
|
23
mm/vmscan.c
23
mm/vmscan.c
|
@ -147,7 +147,7 @@ static bool global_reclaim(struct scan_control *sc)
|
|||
}
|
||||
#endif
|
||||
|
||||
unsigned long zone_reclaimable_pages(struct zone *zone)
|
||||
static unsigned long zone_reclaimable_pages(struct zone *zone)
|
||||
{
|
||||
int nr;
|
||||
|
||||
|
@ -3315,27 +3315,6 @@ void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx)
|
|||
wake_up_interruptible(&pgdat->kswapd_wait);
|
||||
}
|
||||
|
||||
/*
|
||||
* The reclaimable count would be mostly accurate.
|
||||
* The less reclaimable pages may be
|
||||
* - mlocked pages, which will be moved to unevictable list when encountered
|
||||
* - mapped pages, which may require several travels to be reclaimed
|
||||
* - dirty pages, which is not "instantly" reclaimable
|
||||
*/
|
||||
unsigned long global_reclaimable_pages(void)
|
||||
{
|
||||
int nr;
|
||||
|
||||
nr = global_page_state(NR_ACTIVE_FILE) +
|
||||
global_page_state(NR_INACTIVE_FILE);
|
||||
|
||||
if (get_nr_swap_pages() > 0)
|
||||
nr += global_page_state(NR_ACTIVE_ANON) +
|
||||
global_page_state(NR_INACTIVE_ANON);
|
||||
|
||||
return nr;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_HIBERNATION
|
||||
/*
|
||||
* Try to free `nr_to_reclaim' of memory, system-wide, and return the number of
|
||||
|
|
Loading…
Reference in New Issue