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
31 changed files with 137 additions and 155 deletions
|
@ -1,13 +1,13 @@
|
||||||
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:
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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:
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
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
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
|
42
MAINTAINERS
42
MAINTAINERS
|
@ -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
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
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*
|
||||||
|
|
||||||
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*
|
||||||
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/
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
#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 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
#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 @@ out:
|
||||||
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,
|
||||||
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 @@ out:
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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,
|
||||||
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)
|
||||||
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)
|
||||||
* 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)
|
||||||
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);
|
||||||
* 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)
|
||||||
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;
|
||||||
*/
|
*/
|
||||||
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(
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
#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)
|
||||||
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)
|
||||||
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;
|
||||||
* 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)
|
||||||
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)
|
||||||
{
|
{
|
||||||
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)
|
||||||
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 @@ out:
|
||||||
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,
|
||||||
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,
|
||||||
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 @@ out_unlock:
|
||||||
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);
|
||||||
|
|
12
mm/slub.c
12
mm/slub.c
|
@ -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,
|
||||||
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 @@ redo:
|
||||||
|
|
||||||
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,
|
||||||
|
|
||||||
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)
|
||||||
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 @@ load_freelist:
|
||||||
* 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);
|
||||||
|
|
23
mm/vmscan.c
23
mm/vmscan.c
|
@ -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)
|
||||||
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
|
||||||
|
|
Loading…
Add table
Reference in a new issue