Commit 13293115 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 1ecd7450 a4edbc10
What: /config/usb-gadget What: /config/usb-gadget
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This group contains sub-groups corresponding to created This group contains sub-groups corresponding to created
USB gadgets. USB gadgets.
What: /config/usb-gadget/gadget What: /config/usb-gadget/gadget
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes of a gadget: The attributes of a gadget:
...@@ -27,7 +27,7 @@ Description: ...@@ -27,7 +27,7 @@ Description:
What: /config/usb-gadget/gadget/configs What: /config/usb-gadget/gadget/configs
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This group contains a USB gadget's configurations This group contains a USB gadget's configurations
...@@ -58,20 +58,20 @@ Description: ...@@ -58,20 +58,20 @@ Description:
What: /config/usb-gadget/gadget/functions What: /config/usb-gadget/gadget/functions
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This group contains functions available to this USB gadget. This group contains functions available to this USB gadget.
What: /config/usb-gadget/gadget/strings What: /config/usb-gadget/gadget/strings
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This group contains subdirectories for language-specific This group contains subdirectories for language-specific
strings for this gadget. strings for this gadget.
What: /config/usb-gadget/gadget/strings/language What: /config/usb-gadget/gadget/strings/language
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/acm.name What: /config/usb-gadget/gadget/functions/acm.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This item contains just one readonly attribute: port_num. This item contains just one readonly attribute: port_num.
......
What: /config/usb-gadget/gadget/functions/ecm.name What: /config/usb-gadget/gadget/functions/ecm.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/eem.name What: /config/usb-gadget/gadget/functions/eem.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/ffs.name What: /config/usb-gadget/gadget/functions/ffs.name
Date: Nov 2013 Date: Nov 2013
KenelVersion: 3.13 KernelVersion: 3.13
Description: The purpose of this directory is to create and remove it. Description: The purpose of this directory is to create and remove it.
A corresponding USB function instance is created/removed. A corresponding USB function instance is created/removed.
......
What: /config/usb-gadget/gadget/functions/Loopback.name What: /config/usb-gadget/gadget/functions/Loopback.name
Date: Nov 2013 Date: Nov 2013
KenelVersion: 3.13 KernelVersion: 3.13
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/mass_storage.name What: /config/usb-gadget/gadget/functions/mass_storage.name
Date: Oct 2013 Date: Oct 2013
KenelVersion: 3.13 KernelVersion: 3.13
Description: Description:
The attributes: The attributes:
...@@ -13,7 +13,7 @@ Description: ...@@ -13,7 +13,7 @@ Description:
What: /config/usb-gadget/gadget/functions/mass_storage.name/lun.name What: /config/usb-gadget/gadget/functions/mass_storage.name/lun.name
Date: Oct 2013 Date: Oct 2013
KenelVersion: 3.13 KernelVersion: 3.13
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/ncm.name What: /config/usb-gadget/gadget/functions/ncm.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/obex.name What: /config/usb-gadget/gadget/functions/obex.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This item contains just one readonly attribute: port_num. This item contains just one readonly attribute: port_num.
......
What: /config/usb-gadget/gadget/functions/phonet.name What: /config/usb-gadget/gadget/functions/phonet.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This item contains just one readonly attribute: ifname. This item contains just one readonly attribute: ifname.
......
What: /config/usb-gadget/gadget/functions/rndis.name What: /config/usb-gadget/gadget/functions/rndis.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/gser.name What: /config/usb-gadget/gadget/functions/gser.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
This item contains just one readonly attribute: port_num. This item contains just one readonly attribute: port_num.
......
What: /config/usb-gadget/gadget/functions/SourceSink.name What: /config/usb-gadget/gadget/functions/SourceSink.name
Date: Nov 2013 Date: Nov 2013
KenelVersion: 3.13 KernelVersion: 3.13
Description: Description:
The attributes: The attributes:
......
What: /config/usb-gadget/gadget/functions/geth.name What: /config/usb-gadget/gadget/functions/geth.name
Date: Jun 2013 Date: Jun 2013
KenelVersion: 3.11 KernelVersion: 3.11
Description: Description:
The attributes: The attributes:
......
...@@ -696,7 +696,9 @@ swappiness ...@@ -696,7 +696,9 @@ swappiness
This control is used to define how aggressive the kernel will swap This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase agressiveness, lower values 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. The default value is 60.
......
...@@ -309,36 +309,36 @@ F: sound/pci/ad1889.* ...@@ -309,36 +309,36 @@ F: sound/pci/ad1889.*
AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER AD525X ANALOG DEVICES DIGITAL POTENTIOMETERS DRIVER
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD5254 W: http://wiki.analog.com/AD5254
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/misc/ad525x_dpot.c F: drivers/misc/ad525x_dpot.c
AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821) AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD5398 W: http://wiki.analog.com/AD5398
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/regulator/ad5398.c F: drivers/regulator/ad5398.c
AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A) AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD7142 W: http://wiki.analog.com/AD7142
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/input/misc/ad714x.c F: drivers/input/misc/ad714x.c
AD7877 TOUCHSCREEN DRIVER AD7877 TOUCHSCREEN DRIVER
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD7877 W: http://wiki.analog.com/AD7877
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/input/touchscreen/ad7877.c F: drivers/input/touchscreen/ad7877.c
AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889) AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/AD7879 W: http://wiki.analog.com/AD7879
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/input/touchscreen/ad7879.c F: drivers/input/touchscreen/ad7879.c
...@@ -374,8 +374,8 @@ F: include/media/adp1653.h ...@@ -374,8 +374,8 @@ F: include/media/adp1653.h
ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501) ADP5520 BACKLIGHT DRIVER WITH IO EXPANDER (ADP5520/ADP5501)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADP5520 W: http://wiki.analog.com/ADP5520
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/mfd/adp5520.c F: drivers/mfd/adp5520.c
F: drivers/video/backlight/adp5520_bl.c F: drivers/video/backlight/adp5520_bl.c
...@@ -385,16 +385,16 @@ F: drivers/input/keyboard/adp5520-keys.c ...@@ -385,16 +385,16 @@ F: drivers/input/keyboard/adp5520-keys.c
ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587) ADP5588 QWERTY KEYPAD AND IO EXPANDER DRIVER (ADP5588/ADP5587)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADP5588 W: http://wiki.analog.com/ADP5588
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/input/keyboard/adp5588-keys.c F: drivers/input/keyboard/adp5588-keys.c
F: drivers/gpio/gpio-adp5588.c F: drivers/gpio/gpio-adp5588.c
ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863) ADP8860 BACKLIGHT DRIVER (ADP8860/ADP8861/ADP8863)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADP8860 W: http://wiki.analog.com/ADP8860
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/video/backlight/adp8860_bl.c F: drivers/video/backlight/adp8860_bl.c
...@@ -420,8 +420,8 @@ F: drivers/hwmon/adt7475.c ...@@ -420,8 +420,8 @@ F: drivers/hwmon/adt7475.c
ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346) ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
M: Michael Hennerich <michael.hennerich@analog.com> M: Michael Hennerich <michael.hennerich@analog.com>
L: device-drivers-devel@blackfin.uclinux.org
W: http://wiki.analog.com/ADXL345 W: http://wiki.analog.com/ADXL345
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: drivers/input/misc/adxl34x.c F: drivers/input/misc/adxl34x.c
...@@ -627,9 +627,9 @@ F: drivers/media/i2c/adv7842* ...@@ -627,9 +627,9 @@ F: drivers/media/i2c/adv7842*
ANALOG DEVICES INC ASOC CODEC DRIVERS ANALOG DEVICES INC ASOC CODEC DRIVERS
M: Lars-Peter Clausen <lars@metafoo.de> M: Lars-Peter Clausen <lars@metafoo.de>
L: device-drivers-devel@blackfin.uclinux.org
L: alsa-devel@alsa-project.org (moderated for non-subscribers) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
W: http://wiki.analog.com/ W: http://wiki.analog.com/
W: http://ez.analog.com/community/linux-device-drivers
S: Supported S: Supported
F: sound/soc/codecs/adau* F: sound/soc/codecs/adau*
F: sound/soc/codecs/adav* F: sound/soc/codecs/adav*
...@@ -639,7 +639,7 @@ F: sound/soc/codecs/ssm* ...@@ -639,7 +639,7 @@ F: sound/soc/codecs/ssm*
F: sound/soc/codecs/sigmadsp.* F: sound/soc/codecs/sigmadsp.*
ANALOG DEVICES INC ASOC DRIVERS 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) L: alsa-devel@alsa-project.org (moderated for non-subscribers)
W: http://blackfin.uclinux.org/ W: http://blackfin.uclinux.org/
S: Supported S: Supported
...@@ -1742,56 +1742,54 @@ F: fs/bfs/ ...@@ -1742,56 +1742,54 @@ F: fs/bfs/
F: include/uapi/linux/bfs_fs.h F: include/uapi/linux/bfs_fs.h
BLACKFIN ARCHITECTURE BLACKFIN ARCHITECTURE
M: Mike Frysinger <vapier@gentoo.org> M: Steven Miao <realmz6@gmail.com>
L: uclinux-dist-devel@blackfin.uclinux.org L: adi-buildroot-devel@lists.sourceforge.net
W: http://blackfin.uclinux.org W: http://blackfin.uclinux.org
S: Supported S: Supported
F: arch/blackfin/ F: arch/blackfin/
BLACKFIN EMAC DRIVER BLACKFIN EMAC DRIVER
L: uclinux-dist-devel@blackfin.uclinux.org L: adi-buildroot-devel@lists.sourceforge.net
W: http://blackfin.uclinux.org W: http://blackfin.uclinux.org
S: Supported S: Supported
F: drivers/net/ethernet/adi/ F: drivers/net/ethernet/adi/
BLACKFIN RTC DRIVER BLACKFIN RTC DRIVER
M: Mike Frysinger <vapier.adi@gmail.com> L: adi-buildroot-devel@lists.sourceforge.net
L: uclinux-dist-devel@blackfin.uclinux.org
W: http://blackfin.uclinux.org W: http://blackfin.uclinux.org
S: Supported S: Supported
F: drivers/rtc/rtc-bfin.c F: drivers/rtc/rtc-bfin.c
BLACKFIN SDH DRIVER BLACKFIN SDH DRIVER
M: Sonic Zhang <sonic.zhang@analog.com> 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 W: http://blackfin.uclinux.org
S: Supported S: Supported
F: drivers/mmc/host/bfin_sdh.c F: drivers/mmc/host/bfin_sdh.c
BLACKFIN SERIAL DRIVER BLACKFIN SERIAL DRIVER
M: Sonic Zhang <sonic.zhang@analog.com> 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 W: http://blackfin.uclinux.org
S: Supported S: Supported
F: drivers/tty/serial/bfin_uart.c F: drivers/tty/serial/bfin_uart.c
BLACKFIN WATCHDOG DRIVER BLACKFIN WATCHDOG DRIVER
M: Mike Frysinger <vapier.adi@gmail.com> L: adi-buildroot-devel@lists.sourceforge.net
L: uclinux-dist-devel@blackfin.uclinux.org
W: http://blackfin.uclinux.org W: http://blackfin.uclinux.org
S: Supported S: Supported
F: drivers/watchdog/bfin_wdt.c F: drivers/watchdog/bfin_wdt.c
BLACKFIN I2C TWI DRIVER BLACKFIN I2C TWI DRIVER
M: Sonic Zhang <sonic.zhang@analog.com> 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/ W: http://blackfin.uclinux.org/
S: Supported S: Supported
F: drivers/i2c/busses/i2c-bfin-twi.c F: drivers/i2c/busses/i2c-bfin-twi.c
BLACKFIN MEDIA DRIVER BLACKFIN MEDIA DRIVER
M: Scott Jiang <scott.jiang.linux@gmail.com> 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/ W: http://blackfin.uclinux.org/
S: Supported S: Supported
F: drivers/media/platform/blackfin/ F: drivers/media/platform/blackfin/
......
...@@ -286,8 +286,8 @@ asmlinkage long sys32_getegid16(void) ...@@ -286,8 +286,8 @@ asmlinkage long sys32_getegid16(void)
} }
#ifdef CONFIG_SYSVIPC #ifdef CONFIG_SYSVIPC
COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, unsigned long, second, COMPAT_SYSCALL_DEFINE5(s390_ipc, uint, call, int, first, compat_ulong_t, second,
unsigned long, third, compat_uptr_t, ptr) compat_ulong_t, third, compat_uptr_t, ptr)
{ {
if (call >> 16) /* hack for backward compatibility */ if (call >> 16) /* hack for backward compatibility */
return -EINVAL; return -EINVAL;
......
...@@ -204,7 +204,7 @@ SYSCALL_DEFINE3(lookup_dcookie, u64, cookie64, char __user *, buf, size_t, len) ...@@ -204,7 +204,7 @@ SYSCALL_DEFINE3(lookup_dcookie, u64, cookie64, char __user *, buf, size_t, len)
} }
#ifdef CONFIG_COMPAT #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 #ifdef __BIG_ENDIAN
return sys_lookup_dcookie(((u64)w0 << 32) | w1, buf, len); return sys_lookup_dcookie(((u64)w0 << 32) | w1, buf, len);
......
...@@ -964,9 +964,9 @@ static size_t compat_readv(struct file *file, ...@@ -964,9 +964,9 @@ static size_t compat_readv(struct file *file,
return ret; return ret;
} }
COMPAT_SYSCALL_DEFINE3(readv, unsigned long, fd, COMPAT_SYSCALL_DEFINE3(readv, compat_ulong_t, fd,
const struct compat_iovec __user *,vec, const struct compat_iovec __user *,vec,
unsigned long, vlen) compat_ulong_t, vlen)
{ {
struct fd f = fdget(fd); struct fd f = fdget(fd);
ssize_t ret; ssize_t ret;
...@@ -1001,9 +1001,9 @@ COMPAT_SYSCALL_DEFINE4(preadv64, unsigned long, fd, ...@@ -1001,9 +1001,9 @@ COMPAT_SYSCALL_DEFINE4(preadv64, unsigned long, fd,
return ret; return ret;
} }
COMPAT_SYSCALL_DEFINE5(preadv, unsigned long, fd, COMPAT_SYSCALL_DEFINE5(preadv, compat_ulong_t, fd,
const struct compat_iovec __user *,vec, 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; loff_t pos = ((loff_t)pos_high << 32) | pos_low;
return compat_sys_preadv64(fd, vec, vlen, pos); return compat_sys_preadv64(fd, vec, vlen, pos);
...@@ -1031,9 +1031,9 @@ static size_t compat_writev(struct file *file, ...@@ -1031,9 +1031,9 @@ static size_t compat_writev(struct file *file,
return ret; return ret;
} }
COMPAT_SYSCALL_DEFINE3(writev, unsigned long, fd, COMPAT_SYSCALL_DEFINE3(writev, compat_ulong_t, fd,
const struct compat_iovec __user *, vec, const struct compat_iovec __user *, vec,
unsigned long, vlen) compat_ulong_t, vlen)
{ {
struct fd f = fdget(fd); struct fd f = fdget(fd);
ssize_t ret; ssize_t ret;
...@@ -1068,9 +1068,9 @@ COMPAT_SYSCALL_DEFINE4(pwritev64, unsigned long, fd, ...@@ -1068,9 +1068,9 @@ COMPAT_SYSCALL_DEFINE4(pwritev64, unsigned long, fd,
return ret; return ret;
} }
COMPAT_SYSCALL_DEFINE5(pwritev, unsigned long, fd, COMPAT_SYSCALL_DEFINE5(pwritev, compat_ulong_t, fd,
const struct compat_iovec __user *,vec, 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; loff_t pos = ((loff_t)pos_high << 32) | pos_low;
return compat_sys_pwritev64(fd, vec, vlen, pos); return compat_sys_pwritev64(fd, vec, vlen, pos);
......
...@@ -327,16 +327,16 @@ asmlinkage long compat_sys_keyctl(u32 option, ...@@ -327,16 +327,16 @@ asmlinkage long compat_sys_keyctl(u32 option,
u32 arg2, u32 arg3, u32 arg4, u32 arg5); u32 arg2, u32 arg3, u32 arg4, u32 arg5);
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32); asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
asmlinkage ssize_t compat_sys_readv(unsigned long fd, asmlinkage ssize_t compat_sys_readv(compat_ulong_t fd,
const struct compat_iovec __user *vec, unsigned long vlen); const struct compat_iovec __user *vec, compat_ulong_t vlen);
asmlinkage ssize_t compat_sys_writev(unsigned long fd, asmlinkage ssize_t compat_sys_writev(compat_ulong_t fd,
const struct compat_iovec __user *vec, unsigned long vlen); const struct compat_iovec __user *vec, compat_ulong_t vlen);
asmlinkage ssize_t compat_sys_preadv(unsigned long fd, asmlinkage ssize_t compat_sys_preadv(compat_ulong_t fd,
const struct compat_iovec __user *vec, 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 ssize_t compat_sys_pwritev(unsigned long fd, asmlinkage ssize_t compat_sys_pwritev(compat_ulong_t fd,
const struct compat_iovec __user *vec, 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 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, 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, ...@@ -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, asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
compat_long_t addr, compat_long_t data); 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 ... * epoll (fs/eventpoll.c) compat bits follow ...
*/ */
......
...@@ -142,8 +142,6 @@ static inline unsigned long zone_page_state_snapshot(struct zone *zone, ...@@ -142,8 +142,6 @@ static inline unsigned long zone_page_state_snapshot(struct zone *zone,
return x; return x;
} }
extern unsigned long global_reclaimable_pages(void);
#ifdef CONFIG_NUMA #ifdef CONFIG_NUMA
/* /*
* Determine the per node value of a stat item. This function * 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) ...@@ -463,7 +463,7 @@ static int active_pfn_set_overlap(unsigned long pfn, int overlap)
int i; int i;
if (overlap > ACTIVE_PFN_MAX_OVERLAP || overlap < 0) if (overlap > ACTIVE_PFN_MAX_OVERLAP || overlap < 0)
return 0; return overlap;
for (i = RADIX_TREE_MAX_TAGS - 1; i >= 0; i--) for (i = RADIX_TREE_MAX_TAGS - 1; i >= 0; i--)
if (overlap & 1 << i) if (overlap & 1 << i)
...@@ -486,7 +486,7 @@ static void active_pfn_inc_overlap(unsigned long pfn) ...@@ -486,7 +486,7 @@ static void active_pfn_inc_overlap(unsigned long pfn)
* debug_dma_assert_idle() as the pfn may be marked idle * debug_dma_assert_idle() as the pfn may be marked idle
* prematurely. * prematurely.
*/ */
WARN_ONCE(overlap == 0, WARN_ONCE(overlap > ACTIVE_PFN_MAX_OVERLAP,
"DMA-API: exceeded %d overlapping mappings of pfn %lx\n", "DMA-API: exceeded %d overlapping mappings of pfn %lx\n",
ACTIVE_PFN_MAX_OVERLAP, pfn); ACTIVE_PFN_MAX_OVERLAP, pfn);
} }
...@@ -517,7 +517,11 @@ static void active_pfn_remove(struct dma_debug_entry *entry) ...@@ -517,7 +517,11 @@ static void active_pfn_remove(struct dma_debug_entry *entry)
unsigned long flags; unsigned long flags;
spin_lock_irqsave(&radix_lock, 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); radix_tree_delete(&dma_active_pfn, entry->pfn);
spin_unlock_irqrestore(&radix_lock, flags); spin_unlock_irqrestore(&radix_lock, flags);
} }
......
...@@ -316,7 +316,7 @@ EXPORT_SYMBOL(gen_pool_alloc); ...@@ -316,7 +316,7 @@ EXPORT_SYMBOL(gen_pool_alloc);
* gen_pool_dma_alloc - allocate special memory from the pool for DMA usage * gen_pool_dma_alloc - allocate special memory from the pool for DMA usage
* @pool: pool to allocate from * @pool: pool to allocate from
* @size: number of bytes to allocate from the pool * @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. * Allocate the requested number of bytes from the specified pool.
* Uses the pool allocation function (with first-fit algorithm by default). * 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) ...@@ -334,7 +334,8 @@ void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size, dma_addr_t *dma)
if (!vaddr) if (!vaddr)
return NULL; return NULL;
*dma = gen_pool_virt_to_phys(pool, vaddr); if (dma)
*dma = gen_pool_virt_to_phys(pool, vaddr);
return (void *)vaddr; return (void *)vaddr;
} }
......
...@@ -83,7 +83,6 @@ extern unsigned long highest_memmap_pfn; ...@@ -83,7 +83,6 @@ extern unsigned long highest_memmap_pfn;
*/ */
extern int isolate_lru_page(struct page *page); extern int isolate_lru_page(struct page *page);
extern void putback_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); extern bool zone_reclaimable(struct zone *zone);
/* /*
......
...@@ -1077,6 +1077,9 @@ static void * __init memblock_virt_alloc_internal( ...@@ -1077,6 +1077,9 @@ static void * __init memblock_virt_alloc_internal(
if (!align) if (!align)
align = SMP_CACHE_BYTES; align = SMP_CACHE_BYTES;
if (max_addr > memblock.current_limit)
max_addr = memblock.current_limit;
again: again:
alloc = memblock_find_in_range_node(size, align, min_addr, max_addr, alloc = memblock_find_in_range_node(size, align, min_addr, max_addr,
nid); nid);
......
...@@ -2654,7 +2654,7 @@ void mpol_free_shared_policy(struct shared_policy *p) ...@@ -2654,7 +2654,7 @@ void mpol_free_shared_policy(struct shared_policy *p)
} }
#ifdef CONFIG_NUMA_BALANCING #ifdef CONFIG_NUMA_BALANCING
static bool __initdata numabalancing_override; static int __initdata numabalancing_override;
static void __init check_numabalancing_enable(void) static void __init check_numabalancing_enable(void)
{ {
...@@ -2663,9 +2663,15 @@ 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)) if (IS_ENABLED(CONFIG_NUMA_BALANCING_DEFAULT_ENABLED))
numabalancing_default = true; 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) { if (nr_node_ids > 1 && !numabalancing_override) {
printk(KERN_INFO "Enabling automatic NUMA balancing. " pr_info("%s automatic NUMA balancing. "
"Configure with numa_balancing= or the kernel.numa_balancing sysctl"); "Configure with numa_balancing= or the "
"kernel.numa_balancing sysctl",
numabalancing_default ? "Enabling" : "Disabling");
set_numabalancing_state(numabalancing_default); set_numabalancing_state(numabalancing_default);
} }
} }
...@@ -2675,18 +2681,17 @@ static int __init setup_numabalancing(char *str) ...@@ -2675,18 +2681,17 @@ static int __init setup_numabalancing(char *str)
int ret = 0; int ret = 0;
if (!str) if (!str)
goto out; goto out;
numabalancing_override = true;
if (!strcmp(str, "enable")) { if (!strcmp(str, "enable")) {
set_numabalancing_state(true); numabalancing_override = 1;
ret = 1; ret = 1;
} else if (!strcmp(str, "disable")) { } else if (!strcmp(str, "disable")) {
set_numabalancing_state(false); numabalancing_override = -1;
ret = 1; ret = 1;
} }
out: out:
if (!ret) if (!ret)
printk(KERN_WARNING "Unable to parse numa_balancing=\n"); pr_warn("Unable to parse numa_balancing=\n");
return ret; return ret;
} }
......
...@@ -191,6 +191,26 @@ static unsigned long writeout_period_time = 0; ...@@ -191,6 +191,26 @@ static unsigned long writeout_period_time = 0;
* global dirtyable memory first. * 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) static unsigned long highmem_dirtyable_memory(unsigned long total)
{ {
#ifdef CONFIG_HIGHMEM #ifdef CONFIG_HIGHMEM
...@@ -198,11 +218,9 @@ static unsigned long highmem_dirtyable_memory(unsigned long total) ...@@ -198,11 +218,9 @@ static unsigned long highmem_dirtyable_memory(unsigned long total)
unsigned long x = 0; unsigned long x = 0;
for_each_node_state(node, N_HIGH_MEMORY) { for_each_node_state(node, N_HIGH_MEMORY) {
struct zone *z = struct zone *z = &NODE_DATA(node)->node_zones[ZONE_HIGHMEM];
&NODE_DATA(node)->node_zones[ZONE_HIGHMEM];
x += zone_page_state(z, NR_FREE_PAGES) + x += zone_dirtyable_memory(z);
zone_reclaimable_pages(z) - z->dirty_balance_reserve;
} }
/* /*
* Unreclaimable memory (kernel memory or anonymous memory * Unreclaimable memory (kernel memory or anonymous memory
...@@ -238,9 +256,12 @@ static unsigned long global_dirtyable_memory(void) ...@@ -238,9 +256,12 @@ static unsigned long global_dirtyable_memory(void)
{ {
unsigned long x; 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 -= min(x, dirty_balance_reserve);
x += global_page_state(NR_INACTIVE_FILE);
x += global_page_state(NR_ACTIVE_FILE);
if (!vm_highmem_is_dirtyable) if (!vm_highmem_is_dirtyable)
x -= highmem_dirtyable_memory(x); x -= highmem_dirtyable_memory(x);
...@@ -288,32 +309,6 @@ void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty) ...@@ -288,32 +309,6 @@ void global_dirty_limits(unsigned long *pbackground, unsigned long *pdirty)
trace_global_dirty_state(background, dirty); 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_dirty_limit - maximum number of dirty pages allowed in a zone
* @zone: the zone * @zone: the zone
......
...@@ -211,8 +211,6 @@ __do_page_cache_readahead(struct address_space *mapping, struct file *filp, ...@@ -211,8 +211,6 @@ __do_page_cache_readahead(struct address_space *mapping, struct file *filp,
int force_page_cache_readahead(struct address_space *mapping, struct file *filp, int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
pgoff_t offset, unsigned long nr_to_read) pgoff_t offset, unsigned long nr_to_read)
{ {
int ret = 0;
if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages)) if (unlikely(!mapping->a_ops->readpage && !mapping->a_ops->readpages))
return -EINVAL; return -EINVAL;
...@@ -226,15 +224,13 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp, ...@@ -226,15 +224,13 @@ int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
this_chunk = nr_to_read; this_chunk = nr_to_read;
err = __do_page_cache_readahead(mapping, filp, err = __do_page_cache_readahead(mapping, filp,
offset, this_chunk, 0); offset, this_chunk, 0);
if (err < 0) { if (err < 0)
ret = err; return err;
break;
}
ret += err;
offset += this_chunk; offset += this_chunk;
nr_to_read -= this_chunk; nr_to_read -= this_chunk;
} }
return ret; return 0;
} }
/* /*
...@@ -576,8 +572,7 @@ do_readahead(struct address_space *mapping, struct file *filp, ...@@ -576,8 +572,7 @@ do_readahead(struct address_space *mapping, struct file *filp,
if (!mapping || !mapping->a_ops) if (!mapping || !mapping->a_ops)
return -EINVAL; return -EINVAL;
force_page_cache_readahead(mapping, filp, index, nr); return force_page_cache_readahead(mapping, filp, index, nr);
return 0;
} }
SYSCALL_DEFINE3(readahead, int, fd, loff_t, offset, size_t, count) SYSCALL_DEFINE3(readahead, int, fd, loff_t, offset, size_t, count)
......
...@@ -233,14 +233,17 @@ kmem_cache_create_memcg(struct mem_cgroup *memcg, const char *name, size_t size, ...@@ -233,14 +233,17 @@ kmem_cache_create_memcg(struct mem_cgroup *memcg, const char *name, size_t size,
mutex_unlock(&slab_mutex); mutex_unlock(&slab_mutex);
put_online_cpus(); put_online_cpus();
/* 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 * There is no point in flooding logs with warnings or
* this case we will be accounting the memcg allocation to the root * especially crashing the system if we fail to create a cache
* cgroup until we succeed to create its own cache, but it isn't that * for a memcg. In this case we will be accounting the memcg
* critical. * allocation to the root cgroup until we succeed to create its
*/ * own cache, but it isn't that critical.
if (err && !memcg) { */
if (!memcg)
return NULL;
if (flags & SLAB_PANIC) if (flags & SLAB_PANIC)
panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n", panic("kmem_cache_create: Failed to create slab '%s'. Error %d\n",
name, err); name, err);
......
...@@ -1559,7 +1559,7 @@ static inline void *acquire_slab(struct kmem_cache *s, ...@@ -1559,7 +1559,7 @@ static inline void *acquire_slab(struct kmem_cache *s,
new.freelist = freelist; new.freelist = freelist;
} }
VM_BUG_ON_PAGE(new.frozen, &new); VM_BUG_ON(new.frozen);
new.frozen = 1; new.frozen = 1;
if (!__cmpxchg_double_slab(s, page, if (!__cmpxchg_double_slab(s, page,
...@@ -1812,7 +1812,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page, ...@@ -1812,7 +1812,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page,
set_freepointer(s, freelist, prior); set_freepointer(s, freelist, prior);
new.counters = counters; new.counters = counters;
new.inuse--; new.inuse--;
VM_BUG_ON_PAGE(!new.frozen, &new); VM_BUG_ON(!new.frozen);
} while (!__cmpxchg_double_slab(s, page, } while (!__cmpxchg_double_slab(s, page,
prior, counters, prior, counters,
...@@ -1840,7 +1840,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page, ...@@ -1840,7 +1840,7 @@ static void deactivate_slab(struct kmem_cache *s, struct page *page,
old.freelist = page->freelist; old.freelist = page->freelist;
old.counters = page->counters; old.counters = page->counters;
VM_BUG_ON_PAGE(!old.frozen, &old); VM_BUG_ON(!old.frozen);
/* Determine target state of the slab */ /* Determine target state of the slab */
new.counters = old.counters; new.counters = old.counters;
...@@ -1952,7 +1952,7 @@ static void unfreeze_partials(struct kmem_cache *s, ...@@ -1952,7 +1952,7 @@ static void unfreeze_partials(struct kmem_cache *s,
old.freelist = page->freelist; old.freelist = page->freelist;
old.counters = page->counters; old.counters = page->counters;
VM_BUG_ON_PAGE(!old.frozen, &old); VM_BUG_ON(!old.frozen);
new.counters = old.counters; new.counters = old.counters;
new.freelist = old.freelist; new.freelist = old.freelist;
...@@ -2225,7 +2225,7 @@ static inline void *get_freelist(struct kmem_cache *s, struct page *page) ...@@ -2225,7 +2225,7 @@ static inline void *get_freelist(struct kmem_cache *s, struct page *page)
counters = page->counters; counters = page->counters;
new.counters = counters; new.counters = counters;
VM_BUG_ON_PAGE(!new.frozen, &new); VM_BUG_ON(!new.frozen);
new.inuse = page->objects; new.inuse = page->objects;
new.frozen = freelist != NULL; new.frozen = freelist != NULL;
...@@ -2319,7 +2319,7 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node, ...@@ -2319,7 +2319,7 @@ static void *__slab_alloc(struct kmem_cache *s, gfp_t gfpflags, int node,
* page is pointing to the page from which the objects are obtained. * page is pointing to the page from which the objects are obtained.
* That page must be frozen for per cpu allocations to work. * 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->freelist = get_freepointer(s, freelist);
c->tid = next_tid(c->tid); c->tid = next_tid(c->tid);
local_irq_restore(flags); local_irq_restore(flags);
......
...@@ -147,7 +147,7 @@ static bool global_reclaim(struct scan_control *sc) ...@@ -147,7 +147,7 @@ static bool global_reclaim(struct scan_control *sc)
} }
#endif #endif
unsigned long zone_reclaimable_pages(struct zone *zone) static unsigned long zone_reclaimable_pages(struct zone *zone)
{ {
int nr; int nr;
...@@ -3315,27 +3315,6 @@ void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx) ...@@ -3315,27 +3315,6 @@ void wakeup_kswapd(struct zone *zone, int order, enum zone_type classzone_idx)
wake_up_interruptible(&pgdat->kswapd_wait); 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 #ifdef CONFIG_HIBERNATION
/* /*
* Try to free `nr_to_reclaim' of memory, system-wide, and return the number of * Try to free `nr_to_reclaim' of memory, system-wide, and return the number of
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment