This is the 5.4.14 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAl4pSdUACgkQONu9yGCS
 aT7wnRAAqw7JuC+cQMI29GiTfX/+V6BHFUGp0b7EoFWg1VVqiFqEHOf4QETS2Qy1
 3ZAMIBCICMgJD03WUK95tju4byNhpAVc5HDy3ir4E0ZGE6VprgbkzmVWsJhdVd0E
 y0whXgRj2mM0eXwCLcLz2qcruE/AxmL84rlnwZ5BwgxbOPq/xRzQQV8R3XUu2bos
 1felFUzOLhfJKtZ5ig9ToJGCorc7jOU+cXrvUSvntOFGFqsEdmIfcQMoqE2cXExC
 WQIk/JDNGnyHlX7I55P0/OBuSv4SV5JzGZjGkkS/Orqg5/KtaOMh0dAcvp25L3jY
 b2bNDDnKvDEd2eb3GQNb4X7pqy8SFD5WLQH2otJjpZl6nHqOG2xCZCnrVtvf7toC
 kJ0ocNIeGU6OsFzAwXATh3hk6ZFlJYkQarHjvgpETkx+WBcw9yw7DFW9Pa9khkMV
 OWKqfGrqVyV1bTXTfZPHOHm+eBVmqTLPeoK4XeholrnBrPa50pBjexv+uN+UsQnT
 QQxTkDpdfFv4KIkH/qgwDh/gIJ/xtjsI9JTK+70aFbSq1HrXNeoZTYof8iLOggY8
 wh/aWQGf0PVC3ffgqxd7TF6CxiVn4vaP3/FfcBQVMuTnYK03BScdAEOqBCRLvLK6
 509VzsCc1N7qa3vwRTTWxr0u1aCDDgDx5iqmTXW46sYxzjfwnY4=
 =qNcT
 -----END PGP SIGNATURE-----

Merge 5.4.14 into android-5.4

Changes in 5.4.14
	ARM: dts: meson8: fix the size of the PMU registers
	clk: qcom: gcc-sdm845: Add missing flag to votable GDSCs
	soc: amlogic: meson-ee-pwrc: propagate PD provider registration errors
	soc: amlogic: meson-ee-pwrc: propagate errors from pm_genpd_init()
	dt-bindings: reset: meson8b: fix duplicate reset IDs
	ARM: dts: imx6q-dhcom: fix rtc compatible
	arm64: dts: ls1028a: fix endian setting for dcfg
	arm64: dts: imx8mm: Change SDMA1 ahb clock for imx8mm
	bus: ti-sysc: Fix iterating over clocks
	clk: Don't try to enable critical clocks if prepare failed
	Revert "gpio: thunderx: Switch to GPIOLIB_IRQCHIP"
	arm64: dts: imx8mq-librem5-devkit: use correct interrupt for the magnetometer
	ASoC: msm8916-wcd-digital: Reset RX interpolation path after use
	ASoC: stm32: sai: fix possible circular locking
	ASoC: stm32: dfsdm: fix 16 bits record
	ASoC: msm8916-wcd-analog: Fix selected events for MIC BIAS External1
	ASoC: msm8916-wcd-analog: Fix MIC BIAS Internal1
	ARM: OMAP2+: Fix ti_sysc_find_one_clockdomain to check for to_clk_hw_omap
	ARM: dts: imx7ulp: fix reg of cpu node
	ARM: dts: imx6q-dhcom: Fix SGTL5000 VDDIO regulator connection
	ASoC: Intel: bytcht_es8316: Fix Irbis NB41 netbook quirk
	ALSA: dice: fix fallback from protocol extension into limited functionality
	ALSA: seq: Fix racy access for queue timer in proc read
	ALSA: firewire-tascam: fix corruption due to spin lock without restoration in SoftIRQ context
	ALSA: usb-audio: fix sync-ep altsetting sanity check
	arm64: dts: allwinner: a64: olinuxino: Fix SDIO supply regulator
	arm64: dts: allwinner: a64: olinuxino: Fix eMMC supply regulator
	arm64: dts: agilex/stratix10: fix pmu interrupt numbers
	Fix built-in early-load Intel microcode alignment
	clk: sunxi-ng: r40: Allow setting parent rate for external clock outputs
	block: fix an integer overflow in logical block size
	fuse: fix fuse_send_readpages() in the syncronous read case
	io_uring: only allow submit from owning task
	cpuidle: teo: Fix intervals[] array indexing bug
	ARM: dts: am571x-idk: Fix gpios property to have the correct gpio number
	ARM: davinci: select CONFIG_RESET_CONTROLLER
	perf: Correctly handle failed perf_get_aux_event()
	iio: adc: ad7124: Fix DT channel configuration
	iio: imu: st_lsm6dsx: Fix selection of ST_LSM6DS3_ID
	iio: light: vcnl4000: Fix scale for vcnl4040
	iio: chemical: pms7003: fix unmet triggered buffer dependency
	iio: buffer: align the size of scan bytes to size of the largest element
	USB: serial: simple: Add Motorola Solutions TETRA MTP3xxx and MTP85xx
	USB: serial: option: Add support for Quectel RM500Q
	USB: serial: opticon: fix control-message timeouts
	USB: serial: option: add support for Quectel RM500Q in QDL mode
	USB: serial: suppress driver bind attributes
	USB: serial: ch341: handle unbound port at reset_resume
	USB: serial: io_edgeport: handle unbound ports on URB completion
	USB: serial: io_edgeport: add missing active-port sanity check
	USB: serial: keyspan: handle unbound ports
	USB: serial: quatech2: handle unbound ports
	staging: comedi: ni_routes: fix null dereference in ni_find_route_source()
	staging: comedi: ni_routes: allow partial routing information
	scsi: fnic: fix invalid stack access
	scsi: mptfusion: Fix double fetch bug in ioctl
	ptrace: reintroduce usage of subjective credentials in ptrace_has_cap()
	mtd: rawnand: gpmi: Fix suspend/resume problem
	mtd: rawnand: gpmi: Restore nfc timing setup after suspend/resume
	usb: core: hub: Improved device recognition on remote wakeup
	cpu/SMT: Fix x86 link error without CONFIG_SYSFS
	x86/resctrl: Fix an imbalance in domain_remove_cpu()
	x86/CPU/AMD: Ensure clearing of SME/SEV features is maintained
	locking/rwsem: Fix kernel crash when spinning on RWSEM_OWNER_UNKNOWN
	perf/x86/intel/uncore: Fix missing marker for snr_uncore_imc_freerunning_events
	x86/efistub: Disable paging at mixed mode entry
	s390/zcrypt: Fix CCA cipher key gen with clear key value function
	scsi: storvsc: Correctly set number of hardware queues for IDE disk
	mtd: spi-nor: Fix selection of 4-byte addressing opcodes on Spansion
	drm/i915: Add missing include file <linux/math64.h>
	x86/resctrl: Fix potential memory leak
	efi/earlycon: Fix write-combine mapping on x86
	s390/setup: Fix secure ipl message
	clk: samsung: exynos5420: Keep top G3D clocks enabled
	perf hists: Fix variable name's inconsistency in hists__for_each() macro
	locking/lockdep: Fix buffer overrun problem in stack_trace[]
	perf report: Fix incorrectly added dimensions as switch perf data file
	mm/shmem.c: thp, shmem: fix conflict of above-47bit hint address and PMD alignment
	mm/huge_memory.c: thp: fix conflict of above-47bit hint address and PMD alignment
	mm: memcg/slab: fix percpu slab vmstats flushing
	mm: memcg/slab: call flush_memcg_workqueue() only if memcg workqueue is valid
	mm, debug_pagealloc: don't rely on static keys too early
	btrfs: rework arguments of btrfs_unlink_subvol
	btrfs: fix invalid removal of root ref
	btrfs: do not delete mismatched root refs
	btrfs: relocation: fix reloc_root lifespan and access
	btrfs: fix memory leak in qgroup accounting
	btrfs: check rw_devices, not num_devices for balance
	Btrfs: always copy scrub arguments back to user space
	mm/memory_hotplug: don't free usage map when removing a re-added early section
	mm/page-writeback.c: avoid potential division by zero in wb_min_max_ratio()
	mm: khugepaged: add trace status description for SCAN_PAGE_HAS_PRIVATE
	ARM: dts: imx6qdl-sabresd: Remove incorrect power supply assignment
	ARM: dts: imx6sx-sdb: Remove incorrect power supply assignment
	ARM: dts: imx6sl-evk: Remove incorrect power supply assignment
	ARM: dts: imx6sll-evk: Remove incorrect power supply assignment
	ARM: dts: imx6q-icore-mipi: Use 1.5 version of i.Core MX6DL
	ARM: dts: imx7: Fix Toradex Colibri iMX7S 256MB NAND flash support
	net: stmmac: 16KB buffer must be 16 byte aligned
	net: stmmac: Enable 16KB buffer size
	reset: Fix {of,devm}_reset_control_array_get kerneldoc return types
	tipc: fix potential hanging after b/rcast changing
	tipc: fix retrans failure due to wrong destination
	net: fix kernel-doc warning in <linux/netdevice.h>
	block: Fix the type of 'sts' in bsg_queue_rq()
	drm/amd/display: Reorder detect_edp_sink_caps before link settings read.
	bpf: Fix incorrect verifier simulation of ARSH under ALU32
	bpf: Sockmap/tls, during free we may call tcp_bpf_unhash() in loop
	bpf: Sockmap, ensure sock lock held during tear down
	bpf: Sockmap/tls, push write_space updates through ulp updates
	bpf: Sockmap, skmsg helper overestimates push, pull, and pop bounds
	bpf: Sockmap/tls, msg_push_data may leave end mark in place
	bpf: Sockmap/tls, tls_sw can create a plaintext buf > encrypt buf
	bpf: Sockmap/tls, skmsg can have wrapped skmsg that needs extra chaining
	bpf: Sockmap/tls, fix pop data with SK_DROP return code
	i2c: tegra: Fix suspending in active runtime PM state
	i2c: tegra: Properly disable runtime PM on driver's probe error
	cfg80211: fix deadlocks in autodisconnect work
	cfg80211: fix memory leak in nl80211_probe_mesh_link
	cfg80211: fix memory leak in cfg80211_cqm_rssi_update
	cfg80211: fix page refcount issue in A-MSDU decap
	bpf/sockmap: Read psock ingress_msg before sk_receive_queue
	i2c: iop3xx: Fix memory leak in probe error path
	netfilter: fix a use-after-free in mtype_destroy()
	netfilter: arp_tables: init netns pointer in xt_tgdtor_param struct
	netfilter: nat: fix ICMP header corruption on ICMP errors
	netfilter: nft_tunnel: fix null-attribute check
	netfilter: nft_tunnel: ERSPAN_VERSION must not be null
	netfilter: nf_tables: remove WARN and add NLA_STRING upper limits
	netfilter: nf_tables: store transaction list locally while requesting module
	netfilter: nf_tables: fix flowtable list del corruption
	NFC: pn533: fix bulk-message timeout
	net: bpf: Don't leak time wait and request sockets
	bpftool: Fix printing incorrect pointer in btf_dump_ptr
	batman-adv: Fix DAT candidate selection on little endian systems
	macvlan: use skb_reset_mac_header() in macvlan_queue_xmit()
	hv_netvsc: Fix memory leak when removing rndis device
	net: avoid updating qdisc_xmit_lock_key in netdev_update_lockdep_key()
	net: dsa: tag_qca: fix doubled Tx statistics
	net: hns3: pad the short frame before sending to the hardware
	net: hns: fix soft lockup when there is not enough memory
	net: phy: dp83867: Set FORCE_LINK_GOOD to default after reset
	net/sched: act_ife: initalize ife->metalist earlier
	net: usb: lan78xx: limit size of local TSO packets
	net/wan/fsl_ucc_hdlc: fix out of bounds write on array utdm_info
	ptp: free ptp device pin descriptors properly
	r8152: add missing endpoint sanity check
	tcp: fix marked lost packets not being retransmitted
	bnxt_en: Fix NTUPLE firmware command failures.
	bnxt_en: Fix ipv6 RFS filter matching logic.
	bnxt_en: Do not treat DSN (Digital Serial Number) read failure as fatal.
	net: ethernet: ave: Avoid lockdep warning
	net: systemport: Fixed queue mapping in internal ring map
	net: dsa: sja1105: Don't error out on disabled ports with no phy-mode
	net: dsa: tag_gswip: fix typo in tagger name
	net: sched: act_ctinfo: fix memory leak
	net: dsa: bcm_sf2: Configure IMP port for 2Gb/sec
	i40e: prevent memory leak in i40e_setup_macvlans
	drm/amdgpu: allow direct upload save restore list for raven2
	sh_eth: check sh_eth_cpu_data::dual_port when dumping registers
	mlxsw: spectrum: Do not modify cloned SKBs during xmit
	mlxsw: spectrum: Wipe xstats.backlog of down ports
	mlxsw: spectrum_qdisc: Include MC TCs in Qdisc counters
	net: stmmac: selftests: Make it work in Synopsys AXS101 boards
	net: stmmac: selftests: Mark as fail when received VLAN ID != expected
	selftests: mlxsw: qos_mc_aware: Fix mausezahn invocation
	net: stmmac: selftests: Update status when disabling RSS
	net: stmmac: tc: Do not setup flower filtering if RSS is enabled
	devlink: Wait longer before warning about unset port type
	xen/blkfront: Adjust indentation in xlvbd_alloc_gendisk
	dt-bindings: Add missing 'properties' keyword enclosing 'snps,tso'
	tcp: refine rule to allow EPOLLOUT generation under mem pressure
	irqchip: Place CONFIG_SIFIVE_PLIC into the menu
	arm64: dts: qcom: msm8998: Disable coresight by default
	cw1200: Fix a signedness bug in cw1200_load_firmware()
	arm64: dts: meson: axg: fix audio fifo reg size
	arm64: dts: meson: g12: fix audio fifo reg size
	arm64: dts: meson-gxl-s905x-khadas-vim: fix gpio-keys-polled node
	arm64: dts: renesas: r8a77970: Fix PWM3
	arm64: dts: marvell: Add AP806-dual missing CPU clocks
	cfg80211: check for set_wiphy_params
	tick/sched: Annotate lockless access to last_jiffies_update
	arm64: dts: marvell: Fix CP110 NAND controller node multi-line comment alignment
	arm64: dts: renesas: r8a774a1: Remove audio port node
	arm64: dts: imx8mm-evk: Assigned clocks for audio plls
	arm64: dts: qcom: sdm845-cheza: delete zap-shader
	ARM: dts: imx6ul-kontron-n6310-s: Disable the snvs-poweroff driver
	arm64: dts: allwinner: a64: Re-add PMU node
	ARM: dts: dra7: fix cpsw mdio fck clock
	arm64: dts: juno: Fix UART frequency
	ARM: dts: Fix sgx sysconfig register for omap4
	Revert "arm64: dts: juno: add dma-ranges property"
	mtd: devices: fix mchp23k256 read and write
	mtd: cfi_cmdset_0002: only check errors when ready in cfi_check_err_status()
	mtd: cfi_cmdset_0002: fix delayed error detection on HyperFlash
	um: Don't trace irqflags during shutdown
	um: virtio_uml: Disallow modular build
	reiserfs: fix handling of -EOPNOTSUPP in reiserfs_for_each_xattr
	scsi: esas2r: unlock on error in esas2r_nvram_read_direct()
	scsi: hisi_sas: Don't create debugfs dump folder twice
	scsi: hisi_sas: Set the BIST init value before enabling BIST
	scsi: qla4xxx: fix double free bug
	scsi: bnx2i: fix potential use after free
	scsi: target: core: Fix a pr_debug() argument
	scsi: lpfc: fix: Coverity: lpfc_get_scsi_buf_s3(): Null pointer dereferences
	scsi: hisi_sas: Return directly if init hardware failed
	scsi: scsi_transport_sas: Fix memory leak when removing devices
	scsi: qla2xxx: Fix qla2x00_request_irqs() for MSI
	scsi: qla2xxx: fix rports not being mark as lost in sync fabric scan
	scsi: core: scsi_trace: Use get_unaligned_be*()
	scsi: lpfc: Fix list corruption detected in lpfc_put_sgl_per_hdwq
	scsi: lpfc: Fix hdwq sgl locks and irq handling
	scsi: lpfc: Fix a kernel warning triggered by lpfc_get_sgl_per_hdwq()
	rtw88: fix potential read outside array boundary
	perf probe: Fix wrong address verification
	perf script: Allow --time with --reltime
	clk: sprd: Use IS_ERR() to validate the return value of syscon_regmap_lookup_by_phandle()
	clk: imx7ulp: Correct system clock source option #7
	clk: imx7ulp: Correct DDR clock mux options
	regulator: ab8500: Remove SYSCLKREQ from enum ab8505_regulator_id
	hwmon: (pmbus/ibm-cffps) Switch LEDs to blocking brightness call
	hwmon: (pmbus/ibm-cffps) Fix LED blink behavior
	perf script: Fix --reltime with --time
	scsi: lpfc: use hdwq assigned cpu for allocation
	Linux 5.4.14

Signed-off-by: Greg Kroah-Hartman <[email protected]>
Change-Id: I400bdf3be682df698c2477fbf869d5ad8ce300b5
This commit is contained in:
Greg Kroah-Hartman 2020-01-23 08:37:43 +01:00
commit ea962facf5
223 changed files with 1687 additions and 1195 deletions

View file

@ -527,13 +527,13 @@ void prep_transhuge_page(struct page *page)
set_compound_page_dtor(page, TRANSHUGE_PAGE_DTOR);
}
static unsigned long __thp_get_unmapped_area(struct file *filp, unsigned long len,
static unsigned long __thp_get_unmapped_area(struct file *filp,
unsigned long addr, unsigned long len,
loff_t off, unsigned long flags, unsigned long size)
{
unsigned long addr;
loff_t off_end = off + len;
loff_t off_align = round_up(off, size);
unsigned long len_pad;
unsigned long len_pad, ret;
if (off_end <= off_align || (off_end - off_align) < size)
return 0;
@ -542,30 +542,40 @@ static unsigned long __thp_get_unmapped_area(struct file *filp, unsigned long le
if (len_pad < len || (off + len_pad) < off)
return 0;
addr = current->mm->get_unmapped_area(filp, 0, len_pad,
ret = current->mm->get_unmapped_area(filp, addr, len_pad,
off >> PAGE_SHIFT, flags);
if (IS_ERR_VALUE(addr))
/*
* The failure might be due to length padding. The caller will retry
* without the padding.
*/
if (IS_ERR_VALUE(ret))
return 0;
addr += (off - addr) & (size - 1);
return addr;
/*
* Do not try to align to THP boundary if allocation at the address
* hint succeeds.
*/
if (ret == addr)
return addr;
ret += (off - ret) & (size - 1);
return ret;
}
unsigned long thp_get_unmapped_area(struct file *filp, unsigned long addr,
unsigned long len, unsigned long pgoff, unsigned long flags)
{
unsigned long ret;
loff_t off = (loff_t)pgoff << PAGE_SHIFT;
if (addr)
goto out;
if (!IS_DAX(filp->f_mapping->host) || !IS_ENABLED(CONFIG_FS_DAX_PMD))
goto out;
addr = __thp_get_unmapped_area(filp, len, off, flags, PMD_SIZE);
if (addr)
return addr;
out:
ret = __thp_get_unmapped_area(filp, addr, len, off, flags, PMD_SIZE);
if (ret)
return ret;
out:
return current->mm->get_unmapped_area(filp, addr, len, pgoff, flags);
}
EXPORT_SYMBOL_GPL(thp_get_unmapped_area);

View file

@ -3404,49 +3404,34 @@ static u64 mem_cgroup_read_u64(struct cgroup_subsys_state *css,
}
}
static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg, bool slab_only)
static void memcg_flush_percpu_vmstats(struct mem_cgroup *memcg)
{
unsigned long stat[MEMCG_NR_STAT];
unsigned long stat[MEMCG_NR_STAT] = {0};
struct mem_cgroup *mi;
int node, cpu, i;
int min_idx, max_idx;
if (slab_only) {
min_idx = NR_SLAB_RECLAIMABLE;
max_idx = NR_SLAB_UNRECLAIMABLE;
} else {
min_idx = 0;
max_idx = MEMCG_NR_STAT;
}
for (i = min_idx; i < max_idx; i++)
stat[i] = 0;
for_each_online_cpu(cpu)
for (i = min_idx; i < max_idx; i++)
for (i = 0; i < MEMCG_NR_STAT; i++)
stat[i] += per_cpu(memcg->vmstats_percpu->stat[i], cpu);
for (mi = memcg; mi; mi = parent_mem_cgroup(mi))
for (i = min_idx; i < max_idx; i++)
for (i = 0; i < MEMCG_NR_STAT; i++)
atomic_long_add(stat[i], &mi->vmstats[i]);
if (!slab_only)
max_idx = NR_VM_NODE_STAT_ITEMS;
for_each_node(node) {
struct mem_cgroup_per_node *pn = memcg->nodeinfo[node];
struct mem_cgroup_per_node *pi;
for (i = min_idx; i < max_idx; i++)
for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
stat[i] = 0;
for_each_online_cpu(cpu)
for (i = min_idx; i < max_idx; i++)
for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
stat[i] += per_cpu(
pn->lruvec_stat_cpu->count[i], cpu);
for (pi = pn; pi; pi = parent_nodeinfo(pi, node))
for (i = min_idx; i < max_idx; i++)
for (i = 0; i < NR_VM_NODE_STAT_ITEMS; i++)
atomic_long_add(stat[i], &pi->lruvec_stat[i]);
}
}
@ -3520,13 +3505,9 @@ static void memcg_offline_kmem(struct mem_cgroup *memcg)
parent = root_mem_cgroup;
/*
* Deactivate and reparent kmem_caches. Then flush percpu
* slab statistics to have precise values at the parent and
* all ancestor levels. It's required to keep slab stats
* accurate after the reparenting of kmem_caches.
* Deactivate and reparent kmem_caches.
*/
memcg_deactivate_kmem_caches(memcg, parent);
memcg_flush_percpu_vmstats(memcg, true);
kmemcg_id = memcg->kmemcg_id;
BUG_ON(kmemcg_id < 0);
@ -5037,7 +5018,7 @@ static void mem_cgroup_free(struct mem_cgroup *memcg)
* Flush percpu vmstats and vmevents to guarantee the value correctness
* on parent's and all ancestor levels.
*/
memcg_flush_percpu_vmstats(memcg, false);
memcg_flush_percpu_vmstats(memcg);
memcg_flush_percpu_vmevents(memcg);
__mem_cgroup_free(memcg);
}

View file

@ -201,11 +201,11 @@ static void wb_min_max_ratio(struct bdi_writeback *wb,
if (this_bw < tot_bw) {
if (min) {
min *= this_bw;
do_div(min, tot_bw);
min = div64_ul(min, tot_bw);
}
if (max < 100) {
max *= this_bw;
do_div(max, tot_bw);
max = div64_ul(max, tot_bw);
}
}

View file

@ -706,34 +706,27 @@ void prep_compound_page(struct page *page, unsigned int order)
#ifdef CONFIG_DEBUG_PAGEALLOC
unsigned int _debug_guardpage_minorder;
#ifdef CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT
DEFINE_STATIC_KEY_TRUE(_debug_pagealloc_enabled);
#else
bool _debug_pagealloc_enabled_early __read_mostly
= IS_ENABLED(CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT);
EXPORT_SYMBOL(_debug_pagealloc_enabled_early);
DEFINE_STATIC_KEY_FALSE(_debug_pagealloc_enabled);
#endif
EXPORT_SYMBOL(_debug_pagealloc_enabled);
DEFINE_STATIC_KEY_FALSE(_debug_guardpage_enabled);
static int __init early_debug_pagealloc(char *buf)
{
bool enable = false;
if (kstrtobool(buf, &enable))
return -EINVAL;
if (enable)
static_branch_enable(&_debug_pagealloc_enabled);
return 0;
return kstrtobool(buf, &_debug_pagealloc_enabled_early);
}
early_param("debug_pagealloc", early_debug_pagealloc);
static void init_debug_guardpage(void)
void init_debug_pagealloc(void)
{
if (!debug_pagealloc_enabled())
return;
static_branch_enable(&_debug_pagealloc_enabled);
if (!debug_guardpage_minorder())
return;
@ -1198,7 +1191,7 @@ static __always_inline bool free_pages_prepare(struct page *page,
*/
arch_free_page(page, order);
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
kernel_map_pages(page, 1 << order, 0);
kasan_free_nondeferred_pages(page, order);
@ -1219,7 +1212,7 @@ static bool free_pcp_prepare(struct page *page)
static bool bulkfree_pcp_prepare(struct page *page)
{
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
return free_pages_check(page);
else
return false;
@ -1233,7 +1226,7 @@ static bool bulkfree_pcp_prepare(struct page *page)
*/
static bool free_pcp_prepare(struct page *page)
{
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
return free_pages_prepare(page, 0, true);
else
return free_pages_prepare(page, 0, false);
@ -1985,10 +1978,6 @@ void __init page_alloc_init_late(void)
for_each_populated_zone(zone)
set_zone_contiguous(zone);
#ifdef CONFIG_DEBUG_PAGEALLOC
init_debug_guardpage();
#endif
}
#ifdef CONFIG_CMA
@ -2118,7 +2107,7 @@ static inline bool free_pages_prezeroed(void)
*/
static inline bool check_pcp_refill(struct page *page)
{
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
return check_new_page(page);
else
return false;
@ -2140,7 +2129,7 @@ static inline bool check_pcp_refill(struct page *page)
}
static inline bool check_new_pcp(struct page *page)
{
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
return check_new_page(page);
else
return false;
@ -2167,7 +2156,7 @@ inline void post_alloc_hook(struct page *page, unsigned int order,
set_page_refcounted(page);
arch_alloc_page(page, order);
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
kernel_map_pages(page, 1 << order, 1);
kasan_alloc_pages(page, order);
kernel_poison_pages(page, 1 << order, 1);

View file

@ -2106,9 +2106,10 @@ unsigned long shmem_get_unmapped_area(struct file *file,
/*
* Our priority is to support MAP_SHARED mapped hugely;
* and support MAP_PRIVATE mapped hugely too, until it is COWed.
* But if caller specified an address hint, respect that as before.
* But if caller specified an address hint and we allocated area there
* successfully, respect that as before.
*/
if (uaddr)
if (uaddr == addr)
return addr;
if (shmem_huge != SHMEM_HUGE_FORCE) {
@ -2142,7 +2143,7 @@ unsigned long shmem_get_unmapped_area(struct file *file,
if (inflated_len < len)
return addr;
inflated_addr = get_area(NULL, 0, inflated_len, 0, flags);
inflated_addr = get_area(NULL, uaddr, inflated_len, 0, flags);
if (IS_ERR_VALUE(inflated_addr))
return addr;
if (inflated_addr & ~PAGE_MASK)

View file

@ -1415,7 +1415,7 @@ static void kmem_rcu_free(struct rcu_head *head)
#if DEBUG
static bool is_debug_pagealloc_cache(struct kmem_cache *cachep)
{
if (debug_pagealloc_enabled() && OFF_SLAB(cachep) &&
if (debug_pagealloc_enabled_static() && OFF_SLAB(cachep) &&
(cachep->size % PAGE_SIZE) == 0)
return true;
@ -2007,7 +2007,7 @@ int __kmem_cache_create(struct kmem_cache *cachep, slab_flags_t flags)
* to check size >= 256. It guarantees that all necessary small
* sized slab is initialized in current slab initialization sequence.
*/
if (debug_pagealloc_enabled() && (flags & SLAB_POISON) &&
if (debug_pagealloc_enabled_static() && (flags & SLAB_POISON) &&
size >= 256 && cachep->object_size > cache_line_size()) {
if (size < PAGE_SIZE || size % PAGE_SIZE == 0) {
size_t tmp_size = ALIGN(size, PAGE_SIZE);

View file

@ -903,7 +903,8 @@ static void flush_memcg_workqueue(struct kmem_cache *s)
* deactivates the memcg kmem_caches through workqueue. Make sure all
* previous workitems on workqueue are processed.
*/
flush_workqueue(memcg_kmem_cache_wq);
if (likely(memcg_kmem_cache_wq))
flush_workqueue(memcg_kmem_cache_wq);
/*
* If we're racing with children kmem_cache deactivation, it might

View file

@ -290,7 +290,7 @@ static inline void *get_freepointer_safe(struct kmem_cache *s, void *object)
unsigned long freepointer_addr;
void *p;
if (!debug_pagealloc_enabled())
if (!debug_pagealloc_enabled_static())
return get_freepointer(s, object);
freepointer_addr = (unsigned long)object + s->offset;

View file

@ -775,7 +775,14 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages,
if (bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION)) {
unsigned long section_nr = pfn_to_section_nr(pfn);
if (!section_is_early) {
/*
* When removing an early section, the usage map is kept (as the
* usage maps of other sections fall into the same page). It
* will be re-used when re-adding the section - which is then no
* longer an early section. If the usage map is PageReserved, it
* was allocated during boot.
*/
if (!PageReserved(virt_to_page(ms->usage))) {
kfree(ms->usage);
ms->usage = NULL;
}

View file

@ -1349,7 +1349,7 @@ static void free_unmap_vmap_area(struct vmap_area *va)
{
flush_cache_vunmap(va->va_start, va->va_end);
unmap_vmap_area(va);
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
flush_tlb_kernel_range(va->va_start, va->va_end);
free_vmap_area_noflush(va);
@ -1647,7 +1647,7 @@ static void vb_free(const void *addr, unsigned long size)
vunmap_page_range((unsigned long)addr, (unsigned long)addr + size);
if (debug_pagealloc_enabled())
if (debug_pagealloc_enabled_static())
flush_tlb_kernel_range((unsigned long)addr,
(unsigned long)addr + size);