Commit adb2c417 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'akpm' (patches from Andrew)

Merge misc fixes from Andrew Morton:
 "14 patches.

  Subsystems affected by this patch series: mm (kasan, gup, pagecache,
  and kfence), MAINTAINERS, mailmap, nds32, gcov, ocfs2, ia64, and lib"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
  lib: fix kconfig dependency on ARCH_WANT_FRAME_POINTERS
  kfence, x86: fix preemptible warning on KPTI-enabled systems
  lib/test_kasan_module.c: suppress unused var warning
  kasan: fix conflict with page poisoning
  fs: direct-io: fix missing sdio->boundary
  ia64: fix user_stack_pointer() for ptrace()
  ocfs2: fix deadlock between setattr and dio_end_io_write
  gcov: re-fix clang-11+ support
  nds32: flush_dcache_page: use page_mapping_file to avoid races with swapoff
  mm/gup: check page posion status for coredump.
  .mailmap: fix old email addresses
  mailmap: update email address for Jordan Crouse
  treewide: change my e-mail address, fix my name
  MAINTAINERS: update CZ.NIC's Turris information
parents 4e04e751 7d37cb2c
...@@ -168,6 +168,7 @@ Johan Hovold <johan@kernel.org> <jhovold@gmail.com> ...@@ -168,6 +168,7 @@ Johan Hovold <johan@kernel.org> <jhovold@gmail.com>
Johan Hovold <johan@kernel.org> <johan@hovoldconsulting.com> Johan Hovold <johan@kernel.org> <johan@hovoldconsulting.com>
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de> John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
John Stultz <johnstul@us.ibm.com> John Stultz <johnstul@us.ibm.com>
Jordan Crouse <jordan@cosmicpenguin.net> <jcrouse@codeaurora.org>
<josh@joshtriplett.org> <josh@freedesktop.org> <josh@joshtriplett.org> <josh@freedesktop.org>
<josh@joshtriplett.org> <josh@kernel.org> <josh@joshtriplett.org> <josh@kernel.org>
<josh@joshtriplett.org> <josht@linux.vnet.ibm.com> <josh@joshtriplett.org> <josht@linux.vnet.ibm.com>
...@@ -253,8 +254,14 @@ Morten Welinder <welinder@anemone.rentec.com> ...@@ -253,8 +254,14 @@ Morten Welinder <welinder@anemone.rentec.com>
Morten Welinder <welinder@darter.rentec.com> Morten Welinder <welinder@darter.rentec.com>
Morten Welinder <welinder@troll.com> Morten Welinder <welinder@troll.com>
Mythri P K <mythripk@ti.com> Mythri P K <mythripk@ti.com>
Nadia Yvette Chambers <nyc@holomorphy.com> William Lee Irwin III <wli@holomorphy.com>
Nathan Chancellor <nathan@kernel.org> <natechancellor@gmail.com> Nathan Chancellor <nathan@kernel.org> <natechancellor@gmail.com>
Nguyen Anh Quynh <aquynh@gmail.com> Nguyen Anh Quynh <aquynh@gmail.com>
Nicholas Piggin <npiggin@gmail.com> <npiggen@suse.de>
Nicholas Piggin <npiggin@gmail.com> <npiggin@kernel.dk>
Nicholas Piggin <npiggin@gmail.com> <npiggin@suse.de>
Nicholas Piggin <npiggin@gmail.com> <nickpiggin@yahoo.com.au>
Nicholas Piggin <npiggin@gmail.com> <piggin@cyberone.com.au>
Nicolas Ferre <nicolas.ferre@microchip.com> <nicolas.ferre@atmel.com> Nicolas Ferre <nicolas.ferre@microchip.com> <nicolas.ferre@atmel.com>
Nicolas Pitre <nico@fluxnic.net> <nicolas.pitre@linaro.org> Nicolas Pitre <nico@fluxnic.net> <nicolas.pitre@linaro.org>
Nicolas Pitre <nico@fluxnic.net> <nico@linaro.org> Nicolas Pitre <nico@fluxnic.net> <nico@linaro.org>
......
What: /sys/kernel/debug/moxtet/input What: /sys/kernel/debug/moxtet/input
Date: March 2019 Date: March 2019
KernelVersion: 5.3 KernelVersion: 5.3
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) Read input from the shift registers, in hexadecimal. Description: (Read) Read input from the shift registers, in hexadecimal.
Returns N+1 bytes, where N is the number of Moxtet connected Returns N+1 bytes, where N is the number of Moxtet connected
modules. The first byte is from the CPU board itself. modules. The first byte is from the CPU board itself.
...@@ -19,7 +19,7 @@ Description: (Read) Read input from the shift registers, in hexadecimal. ...@@ -19,7 +19,7 @@ Description: (Read) Read input from the shift registers, in hexadecimal.
What: /sys/kernel/debug/moxtet/output What: /sys/kernel/debug/moxtet/output
Date: March 2019 Date: March 2019
KernelVersion: 5.3 KernelVersion: 5.3
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (RW) Read last written value to the shift registers, in Description: (RW) Read last written value to the shift registers, in
hexadecimal, or write values to the shift registers, also hexadecimal, or write values to the shift registers, also
in hexadecimal. in hexadecimal.
......
What: /sys/kernel/debug/turris-mox-rwtm/do_sign What: /sys/kernel/debug/turris-mox-rwtm/do_sign
Date: Jun 2020 Date: Jun 2020
KernelVersion: 5.8 KernelVersion: 5.8
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: Description:
======= =========================================================== ======= ===========================================================
......
What: /sys/bus/moxtet/devices/moxtet-<name>.<addr>/module_description What: /sys/bus/moxtet/devices/moxtet-<name>.<addr>/module_description
Date: March 2019 Date: March 2019
KernelVersion: 5.3 KernelVersion: 5.3
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) Moxtet module description. Format: string Description: (Read) Moxtet module description. Format: string
What: /sys/bus/moxtet/devices/moxtet-<name>.<addr>/module_id What: /sys/bus/moxtet/devices/moxtet-<name>.<addr>/module_id
Date: March 2019 Date: March 2019
KernelVersion: 5.3 KernelVersion: 5.3
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) Moxtet module ID. Format: %x Description: (Read) Moxtet module ID. Format: %x
What: /sys/bus/moxtet/devices/moxtet-<name>.<addr>/module_name What: /sys/bus/moxtet/devices/moxtet-<name>.<addr>/module_name
Date: March 2019 Date: March 2019
KernelVersion: 5.3 KernelVersion: 5.3
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) Moxtet module name. Format: string Description: (Read) Moxtet module name. Format: string
What: /sys/class/leds/<led>/device/brightness What: /sys/class/leds/<led>/device/brightness
Date: July 2020 Date: July 2020
KernelVersion: 5.9 KernelVersion: 5.9
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (RW) On the front panel of the Turris Omnia router there is also Description: (RW) On the front panel of the Turris Omnia router there is also
a button which can be used to control the intensity of all the a button which can be used to control the intensity of all the
LEDs at once, so that if they are too bright, user can dim them. LEDs at once, so that if they are too bright, user can dim them.
......
What: /sys/firmware/turris-mox-rwtm/board_version What: /sys/firmware/turris-mox-rwtm/board_version
Date: August 2019 Date: August 2019
KernelVersion: 5.4 KernelVersion: 5.4
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) Board version burned into eFuses of this Turris Mox board. Description: (Read) Board version burned into eFuses of this Turris Mox board.
Format: %i Format: %i
What: /sys/firmware/turris-mox-rwtm/mac_address* What: /sys/firmware/turris-mox-rwtm/mac_address*
Date: August 2019 Date: August 2019
KernelVersion: 5.4 KernelVersion: 5.4
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) MAC addresses burned into eFuses of this Turris Mox board. Description: (Read) MAC addresses burned into eFuses of this Turris Mox board.
Format: %pM Format: %pM
What: /sys/firmware/turris-mox-rwtm/pubkey What: /sys/firmware/turris-mox-rwtm/pubkey
Date: August 2019 Date: August 2019
KernelVersion: 5.4 KernelVersion: 5.4
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) ECDSA public key (in pubkey hex compressed form) computed Description: (Read) ECDSA public key (in pubkey hex compressed form) computed
as pair to the ECDSA private key burned into eFuses of this as pair to the ECDSA private key burned into eFuses of this
Turris Mox Board. Turris Mox Board.
...@@ -24,7 +24,7 @@ Description: (Read) ECDSA public key (in pubkey hex compressed form) computed ...@@ -24,7 +24,7 @@ Description: (Read) ECDSA public key (in pubkey hex compressed form) computed
What: /sys/firmware/turris-mox-rwtm/ram_size What: /sys/firmware/turris-mox-rwtm/ram_size
Date: August 2019 Date: August 2019
KernelVersion: 5.4 KernelVersion: 5.4
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) RAM size in MiB of this Turris Mox board as was detected Description: (Read) RAM size in MiB of this Turris Mox board as was detected
during manufacturing and burned into eFuses. Can be 512 or 1024. during manufacturing and burned into eFuses. Can be 512 or 1024.
Format: %i Format: %i
...@@ -32,6 +32,6 @@ Description: (Read) RAM size in MiB of this Turris Mox board as was detected ...@@ -32,6 +32,6 @@ Description: (Read) RAM size in MiB of this Turris Mox board as was detected
What: /sys/firmware/turris-mox-rwtm/serial_number What: /sys/firmware/turris-mox-rwtm/serial_number
Date: August 2019 Date: August 2019
KernelVersion: 5.4 KernelVersion: 5.4
Contact: Marek Behún <marek.behun@nic.cz> Contact: Marek Behún <kabel@kernel.org>
Description: (Read) Serial number burned into eFuses of this Turris Mox device. Description: (Read) Serial number burned into eFuses of this Turris Mox device.
Format: %016X Format: %016X
...@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml# ...@@ -7,7 +7,7 @@ $schema: http://devicetree.org/meta-schemas/core.yaml#
title: CZ.NIC's Turris Omnia LEDs driver title: CZ.NIC's Turris Omnia LEDs driver
maintainers: maintainers:
- Marek Behún <marek.behun@nic.cz> - Marek Behún <kabel@kernel.org>
description: description:
This module adds support for the RGB LEDs found on the front panel of the This module adds support for the RGB LEDs found on the front panel of the
......
...@@ -1790,19 +1790,26 @@ F: drivers/net/ethernet/cortina/ ...@@ -1790,19 +1790,26 @@ F: drivers/net/ethernet/cortina/
F: drivers/pinctrl/pinctrl-gemini.c F: drivers/pinctrl/pinctrl-gemini.c
F: drivers/rtc/rtc-ftrtc010.c F: drivers/rtc/rtc-ftrtc010.c
ARM/CZ.NIC TURRIS MOX SUPPORT ARM/CZ.NIC TURRIS SUPPORT
M: Marek Behun <marek.behun@nic.cz> M: Marek Behun <kabel@kernel.org>
S: Maintained S: Maintained
W: http://mox.turris.cz W: https://www.turris.cz/
F: Documentation/ABI/testing/debugfs-moxtet F: Documentation/ABI/testing/debugfs-moxtet
F: Documentation/ABI/testing/sysfs-bus-moxtet-devices F: Documentation/ABI/testing/sysfs-bus-moxtet-devices
F: Documentation/ABI/testing/sysfs-firmware-turris-mox-rwtm F: Documentation/ABI/testing/sysfs-firmware-turris-mox-rwtm
F: Documentation/devicetree/bindings/bus/moxtet.txt F: Documentation/devicetree/bindings/bus/moxtet.txt
F: Documentation/devicetree/bindings/firmware/cznic,turris-mox-rwtm.txt F: Documentation/devicetree/bindings/firmware/cznic,turris-mox-rwtm.txt
F: Documentation/devicetree/bindings/gpio/gpio-moxtet.txt F: Documentation/devicetree/bindings/gpio/gpio-moxtet.txt
F: Documentation/devicetree/bindings/leds/cznic,turris-omnia-leds.yaml
F: Documentation/devicetree/bindings/watchdog/armada-37xx-wdt.txt
F: drivers/bus/moxtet.c F: drivers/bus/moxtet.c
F: drivers/firmware/turris-mox-rwtm.c F: drivers/firmware/turris-mox-rwtm.c
F: drivers/leds/leds-turris-omnia.c
F: drivers/mailbox/armada-37xx-rwtm-mailbox.c
F: drivers/gpio/gpio-moxtet.c F: drivers/gpio/gpio-moxtet.c
F: drivers/watchdog/armada_37xx_wdt.c
F: include/dt-bindings/bus/moxtet.h
F: include/linux/armada-37xx-rwtm-mailbox.h
F: include/linux/moxtet.h F: include/linux/moxtet.h
ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6) ARM/EZX SMARTPHONES (A780, A910, A1200, E680, ROKR E2 and ROKR E6)
......
// SPDX-License-Identifier: (GPL-2.0+ OR MIT) // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/* /*
* Device Tree file for CZ.NIC Turris Mox Board * Device Tree file for CZ.NIC Turris Mox Board
* 2019 by Marek Behun <marek.behun@nic.cz> * 2019 by Marek Behún <kabel@kernel.org>
*/ */
/dts-v1/; /dts-v1/;
......
...@@ -54,8 +54,7 @@ ...@@ -54,8 +54,7 @@
static inline unsigned long user_stack_pointer(struct pt_regs *regs) static inline unsigned long user_stack_pointer(struct pt_regs *regs)
{ {
/* FIXME: should this be bspstore + nr_dirty regs? */ return regs->r12;
return regs->ar_bspstore;
} }
static inline int is_syscall_success(struct pt_regs *regs) static inline int is_syscall_success(struct pt_regs *regs)
...@@ -79,11 +78,6 @@ static inline long regs_return_value(struct pt_regs *regs) ...@@ -79,11 +78,6 @@ static inline long regs_return_value(struct pt_regs *regs)
unsigned long __ip = instruction_pointer(regs); \ unsigned long __ip = instruction_pointer(regs); \
(__ip & ~3UL) + ((__ip & 3UL) << 2); \ (__ip & ~3UL) + ((__ip & 3UL) << 2); \
}) })
/*
* Why not default? Because user_stack_pointer() on ia64 gives register
* stack backing store instead...
*/
#define current_user_stack_pointer() (current_pt_regs()->r12)
/* given a pointer to a task_struct, return the user's pt_regs */ /* given a pointer to a task_struct, return the user's pt_regs */
# define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1) # define task_pt_regs(t) (((struct pt_regs *) ((char *) (t) + IA64_STK_OFFSET)) - 1)
......
...@@ -238,7 +238,7 @@ void flush_dcache_page(struct page *page) ...@@ -238,7 +238,7 @@ void flush_dcache_page(struct page *page)
{ {
struct address_space *mapping; struct address_space *mapping;
mapping = page_mapping(page); mapping = page_mapping_file(page);
if (mapping && !mapping_mapped(mapping)) if (mapping && !mapping_mapped(mapping))
set_bit(PG_dcache_dirty, &page->flags); set_bit(PG_dcache_dirty, &page->flags);
else { else {
......
...@@ -56,8 +56,13 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect) ...@@ -56,8 +56,13 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)
else else
set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT)); set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT));
/* Flush this CPU's TLB. */ /*
* Flush this CPU's TLB, assuming whoever did the allocation/free is
* likely to continue running on this CPU.
*/
preempt_disable();
flush_tlb_one_kernel(addr); flush_tlb_one_kernel(addr);
preempt_enable();
return true; return true;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Turris Mox module configuration bus driver * Turris Mox module configuration bus driver
* *
* Copyright (C) 2019 Marek Behun <marek.behun@nic.cz> * Copyright (C) 2019 Marek Behún <kabel@kernel.org>
*/ */
#include <dt-bindings/bus/moxtet.h> #include <dt-bindings/bus/moxtet.h>
...@@ -879,6 +879,6 @@ static void __exit moxtet_exit(void) ...@@ -879,6 +879,6 @@ static void __exit moxtet_exit(void)
} }
module_exit(moxtet_exit); module_exit(moxtet_exit);
MODULE_AUTHOR("Marek Behun <marek.behun@nic.cz>"); MODULE_AUTHOR("Marek Behun <kabel@kernel.org>");
MODULE_DESCRIPTION("CZ.NIC's Turris Mox module configuration bus"); MODULE_DESCRIPTION("CZ.NIC's Turris Mox module configuration bus");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Turris Mox rWTM firmware driver * Turris Mox rWTM firmware driver
* *
* Copyright (C) 2019 Marek Behun <marek.behun@nic.cz> * Copyright (C) 2019 Marek Behún <kabel@kernel.org>
*/ */
#include <linux/armada-37xx-rwtm-mailbox.h> #include <linux/armada-37xx-rwtm-mailbox.h>
...@@ -547,4 +547,4 @@ module_platform_driver(turris_mox_rwtm_driver); ...@@ -547,4 +547,4 @@ module_platform_driver(turris_mox_rwtm_driver);
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("Turris Mox rWTM firmware driver"); MODULE_DESCRIPTION("Turris Mox rWTM firmware driver");
MODULE_AUTHOR("Marek Behun <marek.behun@nic.cz>"); MODULE_AUTHOR("Marek Behun <kabel@kernel.org>");
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Turris Mox Moxtet GPIO expander * Turris Mox Moxtet GPIO expander
* *
* Copyright (C) 2018 Marek Behun <marek.behun@nic.cz> * Copyright (C) 2018 Marek Behún <kabel@kernel.org>
*/ */
#include <linux/bitops.h> #include <linux/bitops.h>
...@@ -174,6 +174,6 @@ static struct moxtet_driver moxtet_gpio_driver = { ...@@ -174,6 +174,6 @@ static struct moxtet_driver moxtet_gpio_driver = {
}; };
module_moxtet_driver(moxtet_gpio_driver); module_moxtet_driver(moxtet_gpio_driver);
MODULE_AUTHOR("Marek Behun <marek.behun@nic.cz>"); MODULE_AUTHOR("Marek Behun <kabel@kernel.org>");
MODULE_DESCRIPTION("Turris Mox Moxtet GPIO expander"); MODULE_DESCRIPTION("Turris Mox Moxtet GPIO expander");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* CZ.NIC's Turris Omnia LEDs driver * CZ.NIC's Turris Omnia LEDs driver
* *
* 2020 by Marek Behun <marek.behun@nic.cz> * 2020 by Marek Behún <kabel@kernel.org>
*/ */
#include <linux/i2c.h> #include <linux/i2c.h>
...@@ -287,6 +287,6 @@ static struct i2c_driver omnia_leds_driver = { ...@@ -287,6 +287,6 @@ static struct i2c_driver omnia_leds_driver = {
module_i2c_driver(omnia_leds_driver); module_i2c_driver(omnia_leds_driver);
MODULE_AUTHOR("Marek Behun <marek.behun@nic.cz>"); MODULE_AUTHOR("Marek Behun <kabel@kernel.org>");
MODULE_DESCRIPTION("CZ.NIC's Turris Omnia LEDs"); MODULE_DESCRIPTION("CZ.NIC's Turris Omnia LEDs");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* rWTM BIU Mailbox driver for Armada 37xx * rWTM BIU Mailbox driver for Armada 37xx
* *
* Author: Marek Behun <marek.behun@nic.cz> * Author: Marek Behún <kabel@kernel.org>
*/ */
#include <linux/device.h> #include <linux/device.h>
...@@ -203,4 +203,4 @@ module_platform_driver(armada_37xx_mbox_driver); ...@@ -203,4 +203,4 @@ module_platform_driver(armada_37xx_mbox_driver);
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("rWTM BIU Mailbox driver for Armada 37xx"); MODULE_DESCRIPTION("rWTM BIU Mailbox driver for Armada 37xx");
MODULE_AUTHOR("Marek Behun <marek.behun@nic.cz>"); MODULE_AUTHOR("Marek Behun <kabel@kernel.org>");
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Watchdog driver for Marvell Armada 37xx SoCs * Watchdog driver for Marvell Armada 37xx SoCs
* *
* Author: Marek Behun <marek.behun@nic.cz> * Author: Marek Behún <kabel@kernel.org>
*/ */
#include <linux/clk.h> #include <linux/clk.h>
...@@ -366,7 +366,7 @@ static struct platform_driver armada_37xx_wdt_driver = { ...@@ -366,7 +366,7 @@ static struct platform_driver armada_37xx_wdt_driver = {
module_platform_driver(armada_37xx_wdt_driver); module_platform_driver(armada_37xx_wdt_driver);
MODULE_AUTHOR("Marek Behun <marek.behun@nic.cz>"); MODULE_AUTHOR("Marek Behun <kabel@kernel.org>");
MODULE_DESCRIPTION("Armada 37xx CPU Watchdog"); MODULE_DESCRIPTION("Armada 37xx CPU Watchdog");
MODULE_LICENSE("GPL v2"); MODULE_LICENSE("GPL v2");
......
...@@ -812,6 +812,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, ...@@ -812,6 +812,7 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page,
struct buffer_head *map_bh) struct buffer_head *map_bh)
{ {
int ret = 0; int ret = 0;
int boundary = sdio->boundary; /* dio_send_cur_page may clear it */
if (dio->op == REQ_OP_WRITE) { if (dio->op == REQ_OP_WRITE) {
/* /*
...@@ -850,10 +851,10 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page, ...@@ -850,10 +851,10 @@ submit_page_section(struct dio *dio, struct dio_submit *sdio, struct page *page,
sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits; sdio->cur_page_fs_offset = sdio->block_in_file << sdio->blkbits;
out: out:
/* /*
* If sdio->boundary then we want to schedule the IO now to * If boundary then we want to schedule the IO now to
* avoid metadata seeks. * avoid metadata seeks.
*/ */
if (sdio->boundary) { if (boundary) {
ret = dio_send_cur_page(dio, sdio, map_bh); ret = dio_send_cur_page(dio, sdio, map_bh);
if (sdio->bio) if (sdio->bio)
dio_bio_submit(dio, sdio); dio_bio_submit(dio, sdio);
......
...@@ -2295,7 +2295,7 @@ static int ocfs2_dio_end_io_write(struct inode *inode, ...@@ -2295,7 +2295,7 @@ static int ocfs2_dio_end_io_write(struct inode *inode,
struct ocfs2_alloc_context *meta_ac = NULL; struct ocfs2_alloc_context *meta_ac = NULL;
handle_t *handle = NULL; handle_t *handle = NULL;
loff_t end = offset + bytes; loff_t end = offset + bytes;
int ret = 0, credits = 0, locked = 0; int ret = 0, credits = 0;
ocfs2_init_dealloc_ctxt(&dealloc); ocfs2_init_dealloc_ctxt(&dealloc);
...@@ -2306,13 +2306,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode, ...@@ -2306,13 +2306,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode,
!dwc->dw_orphaned) !dwc->dw_orphaned)
goto out; goto out;
/* ocfs2_file_write_iter will get i_mutex, so we need not lock if we
* are in that context. */
if (dwc->dw_writer_pid != task_pid_nr(current)) {
inode_lock(inode);
locked = 1;
}
ret = ocfs2_inode_lock(inode, &di_bh, 1); ret = ocfs2_inode_lock(inode, &di_bh, 1);
if (ret < 0) { if (ret < 0) {
mlog_errno(ret); mlog_errno(ret);
...@@ -2393,8 +2386,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode, ...@@ -2393,8 +2386,6 @@ static int ocfs2_dio_end_io_write(struct inode *inode,
if (meta_ac) if (meta_ac)
ocfs2_free_alloc_context(meta_ac); ocfs2_free_alloc_context(meta_ac);
ocfs2_run_deallocs(osb, &dealloc); ocfs2_run_deallocs(osb, &dealloc);
if (locked)
inode_unlock(inode);
ocfs2_dio_free_write_ctx(inode, dwc); ocfs2_dio_free_write_ctx(inode, dwc);
return ret; return ret;
......
...@@ -1245,22 +1245,24 @@ int ocfs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, ...@@ -1245,22 +1245,24 @@ int ocfs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
goto bail_unlock; goto bail_unlock;
} }
} }
down_write(&OCFS2_I(inode)->ip_alloc_sem);
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS + handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS +
2 * ocfs2_quota_trans_credits(sb)); 2 * ocfs2_quota_trans_credits(sb));
if (IS_ERR(handle)) { if (IS_ERR(handle)) {
status = PTR_ERR(handle); status = PTR_ERR(handle);
mlog_errno(status); mlog_errno(status);
goto bail_unlock; goto bail_unlock_alloc;
} }
status = __dquot_transfer(inode, transfer_to); status = __dquot_transfer(inode, transfer_to);
if (status < 0) if (status < 0)
goto bail_commit; goto bail_commit;
} else { } else {
down_write(&OCFS2_I(inode)->ip_alloc_sem);
handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS); handle = ocfs2_start_trans(osb, OCFS2_INODE_UPDATE_CREDITS);
if (IS_ERR(handle)) { if (IS_ERR(handle)) {
status = PTR_ERR(handle); status = PTR_ERR(handle);
mlog_errno(status); mlog_errno(status);
goto bail_unlock; goto bail_unlock_alloc;
} }
} }
...@@ -1273,6 +1275,8 @@ int ocfs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry, ...@@ -1273,6 +1275,8 @@ int ocfs2_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
bail_commit: bail_commit:
ocfs2_commit_trans(osb, handle); ocfs2_commit_trans(osb, handle);
bail_unlock_alloc:
up_write(&OCFS2_I(inode)->ip_alloc_sem);
bail_unlock: bail_unlock:
if (status && inode_locked) { if (status && inode_locked) {
ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock); ocfs2_inode_unlock_tracker(inode, 1, &oh, had_lock);
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Constant for device tree bindings for Turris Mox module configuration bus * Constant for device tree bindings for Turris Mox module configuration bus
* *
* Copyright (C) 2019 Marek Behun <marek.behun@nic.cz> * Copyright (C) 2019 Marek Behún <kabel@kernel.org>
*/ */
#ifndef _DT_BINDINGS_BUS_MOXTET_H #ifndef _DT_BINDINGS_BUS_MOXTET_H
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* rWTM BIU Mailbox driver for Armada 37xx * rWTM BIU Mailbox driver for Armada 37xx
* *
* Author: Marek Behun <marek.behun@nic.cz> * Author: Marek Behún <kabel@kernel.org>
*/ */
#ifndef _LINUX_ARMADA_37XX_RWTM_MAILBOX_H_ #ifndef _LINUX_ARMADA_37XX_RWTM_MAILBOX_H_
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Turris Mox module configuration bus driver * Turris Mox module configuration bus driver
* *
* Copyright (C) 2019 Marek Behun <marek.behun@nic.cz> * Copyright (C) 2019 Marek Behún <kabel@kernel.org>
*/ */
#ifndef __LINUX_MOXTET_H #ifndef __LINUX_MOXTET_H
......
...@@ -70,7 +70,9 @@ struct gcov_fn_info { ...@@ -70,7 +70,9 @@ struct gcov_fn_info {
u32 ident; u32 ident;
u32 checksum; u32 checksum;
#if CONFIG_CLANG_VERSION < 110000
u8 use_extra_checksum; u8 use_extra_checksum;
#endif
u32 cfg_checksum; u32 cfg_checksum;
u32 num_counters; u32 num_counters;
...@@ -145,10 +147,8 @@ void llvm_gcda_emit_function(u32 ident, const char *function_name, ...@@ -145,10 +147,8 @@ void llvm_gcda_emit_function(u32 ident, const char *function_name,
list_add_tail(&info->head, &current_info->functions); list_add_tail(&info->head, &current_info->functions);
} }
EXPORT_SYMBOL(llvm_gcda_emit_function);
#else #else
void llvm_gcda_emit_function(u32 ident, u32 func_checksum, void llvm_gcda_emit_function(u32 ident, u32 func_checksum, u32 cfg_checksum)
u8 use_extra_checksum, u32 cfg_checksum)
{ {
struct gcov_fn_info *info = kzalloc(sizeof(*info), GFP_KERNEL); struct gcov_fn_info *info = kzalloc(sizeof(*info), GFP_KERNEL);
...@@ -158,12 +158,11 @@ void llvm_gcda_emit_function(u32 ident, u32 func_checksum, ...@@ -158,12 +158,11 @@ void llvm_gcda_emit_function(u32 ident, u32 func_checksum,
INIT_LIST_HEAD(&info->head); INIT_LIST_HEAD(&info->head);
info->ident = ident; info->ident = ident;
info->checksum = func_checksum; info->checksum = func_checksum;
info->use_extra_checksum = use_extra_checksum;
info->cfg_checksum = cfg_checksum; info->cfg_checksum = cfg_checksum;
list_add_tail(&info->head, &current_info->functions); list_add_tail(&info->head, &current_info->functions);
} }
EXPORT_SYMBOL(llvm_gcda_emit_function);
#endif #endif
EXPORT_SYMBOL(llvm_gcda_emit_function);
void llvm_gcda_emit_arcs(u32 num_counters, u64 *counters) void llvm_gcda_emit_arcs(u32 num_counters, u64 *counters)
{ {
...@@ -293,11 +292,16 @@ int gcov_info_is_compatible(struct gcov_info *info1, struct gcov_info *info2) ...@@ -293,11 +292,16 @@ int gcov_info_is_compatible(struct gcov_info *info1, struct gcov_info *info2)
!list_is_last(&fn_ptr2->head, &info2->functions)) { !list_is_last(&fn_ptr2->head, &info2->functions)) {
if (fn_ptr1->checksum != fn_ptr2->checksum) if (fn_ptr1->checksum != fn_ptr2->checksum)
return false; return false;
#if CONFIG_CLANG_VERSION < 110000
if (fn_ptr1->use_extra_checksum != fn_ptr2->use_extra_checksum) if (fn_ptr1->use_extra_checksum != fn_ptr2->use_extra_checksum)
return false; return false;
if (fn_ptr1->use_extra_checksum && if (fn_ptr1->use_extra_checksum &&
fn_ptr1->cfg_checksum != fn_ptr2->cfg_checksum) fn_ptr1->cfg_checksum != fn_ptr2->cfg_checksum)
return false; return false;
#else
if (fn_ptr1->cfg_checksum != fn_ptr2->cfg_checksum)
return false;
#endif
fn_ptr1 = list_next_entry(fn_ptr1, head); fn_ptr1 = list_next_entry(fn_ptr1, head);
fn_ptr2 = list_next_entry(fn_ptr2, head); fn_ptr2 = list_next_entry(fn_ptr2, head);
} }
...@@ -529,17 +533,22 @@ static size_t convert_to_gcda(char *buffer, struct gcov_info *info) ...@@ -529,17 +533,22 @@ static size_t convert_to_gcda(char *buffer, struct gcov_info *info)
list_for_each_entry(fi_ptr, &info->functions, head) { list_for_each_entry(fi_ptr, &info->functions, head) {
u32 i; u32 i;
u32 len = 2;
if (fi_ptr->use_extra_checksum)
len++;
pos += store_gcov_u32(buffer, pos, GCOV_TAG_FUNCTION); pos += store_gcov_u32(buffer, pos, GCOV_TAG_FUNCTION);
pos += store_gcov_u32(buffer, pos, len); #if CONFIG_CLANG_VERSION < 110000
pos += store_gcov_u32(buffer, pos,
fi_ptr->use_extra_checksum ? 3 : 2);
#else
pos += store_gcov_u32(buffer, pos, 3);
#endif
pos += store_gcov_u32(buffer, pos, fi_ptr->ident); pos += store_gcov_u32(buffer, pos, fi_ptr->ident);
pos += store_gcov_u32(buffer, pos, fi_ptr->checksum); pos += store_gcov_u32(buffer, pos, fi_ptr->checksum);
#if CONFIG_CLANG_VERSION < 110000
if (fi_ptr->use_extra_checksum) if (fi_ptr->use_extra_checksum)
pos += store_gcov_u32(buffer, pos, fi_ptr->cfg_checksum); pos += store_gcov_u32(buffer, pos, fi_ptr->cfg_checksum);
#else
pos += store_gcov_u32(buffer, pos, fi_ptr->cfg_checksum);
#endif
pos += store_gcov_u32(buffer, pos, GCOV_TAG_COUNTER_BASE); pos += store_gcov_u32(buffer, pos, GCOV_TAG_COUNTER_BASE);
pos += store_gcov_u32(buffer, pos, fi_ptr->num_counters * 2); pos += store_gcov_u32(buffer, pos, fi_ptr->num_counters * 2);
......
...@@ -1363,7 +1363,7 @@ config LOCKDEP ...@@ -1363,7 +1363,7 @@ config LOCKDEP
bool bool
depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT
select STACKTRACE select STACKTRACE
select FRAME_POINTER if !MIPS && !PPC && !ARM && !S390 && !MICROBLAZE && !ARC && !X86 depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
select KALLSYMS select KALLSYMS
select KALLSYMS_ALL select KALLSYMS_ALL
...@@ -1665,7 +1665,7 @@ config LATENCYTOP ...@@ -1665,7 +1665,7 @@ config LATENCYTOP
depends on DEBUG_KERNEL depends on DEBUG_KERNEL
depends on STACKTRACE_SUPPORT depends on STACKTRACE_SUPPORT
depends on PROC_FS depends on PROC_FS
select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86 depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
select KALLSYMS select KALLSYMS
select KALLSYMS_ALL select KALLSYMS_ALL
select STACKTRACE select STACKTRACE
...@@ -1918,7 +1918,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER ...@@ -1918,7 +1918,7 @@ config FAULT_INJECTION_STACKTRACE_FILTER
depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT depends on FAULT_INJECTION_DEBUG_FS && STACKTRACE_SUPPORT
depends on !X86_64 depends on !X86_64
select STACKTRACE select STACKTRACE
select FRAME_POINTER if !MIPS && !PPC && !S390 && !MICROBLAZE && !ARM && !ARC && !X86 depends on FRAME_POINTER || MIPS || PPC || S390 || MICROBLAZE || ARM || ARC || X86
help help
Provide stacktrace filter for fault-injection capabilities Provide stacktrace filter for fault-injection capabilities
......
...@@ -22,7 +22,7 @@ static noinline void __init copy_user_test(void) ...@@ -22,7 +22,7 @@ static noinline void __init copy_user_test(void)
char *kmem; char *kmem;
char __user *usermem; char __user *usermem;
size_t size = 10; size_t size = 10;
int unused; int __maybe_unused unused;
kmem = kmalloc(size, GFP_KERNEL); kmem = kmalloc(size, GFP_KERNEL);
if (!kmem) if (!kmem)
......
...@@ -1535,6 +1535,10 @@ struct page *get_dump_page(unsigned long addr) ...@@ -1535,6 +1535,10 @@ struct page *get_dump_page(unsigned long addr)
FOLL_FORCE | FOLL_DUMP | FOLL_GET); FOLL_FORCE | FOLL_DUMP | FOLL_GET);
if (locked) if (locked)
mmap_read_unlock(mm); mmap_read_unlock(mm);
if (ret == 1 && is_page_poisoned(page))
return NULL;
return (ret == 1) ? page : NULL; return (ret == 1) ? page : NULL;
} }
#endif /* CONFIG_ELF_CORE */ #endif /* CONFIG_ELF_CORE */
......
...@@ -97,6 +97,26 @@ static inline void set_page_refcounted(struct page *page) ...@@ -97,6 +97,26 @@ static inline void set_page_refcounted(struct page *page)
set_page_count(page, 1); set_page_count(page, 1);
} }
/*
* When kernel touch the user page, the user page may be have been marked
* poison but still mapped in user space, if without this page, the kernel
* can guarantee the data integrity and operation success, the kernel is
* better to check the posion status and avoid touching it, be good not to
* panic, coredump for process fatal signal is a sample case matching this
* scenario. Or if kernel can't guarantee the data integrity, it's better
* not to call this function, let kernel touch the poison page and get to
* panic.
*/
static inline bool is_page_poisoned(struct page *page)
{
if (PageHWPoison(page))
return true;
else if (PageHuge(page) && PageHWPoison(compound_head(page)))
return true;
return false;
}
extern unsigned long highest_memmap_pfn; extern unsigned long highest_memmap_pfn;
/* /*
......
...@@ -77,12 +77,14 @@ static void unpoison_page(struct page *page) ...@@ -77,12 +77,14 @@ static void unpoison_page(struct page *page)
void *addr; void *addr;
addr = kmap_atomic(page); addr = kmap_atomic(page);
kasan_disable_current();
/* /*
* Page poisoning when enabled poisons each and every page * Page poisoning when enabled poisons each and every page
* that is freed to buddy. Thus no extra check is done to * that is freed to buddy. Thus no extra check is done to
* see if a page was poisoned. * see if a page was poisoned.
*/ */
check_poison_mem(addr, PAGE_SIZE); check_poison_mem(kasan_reset_tag(addr), PAGE_SIZE);
kasan_enable_current();
kunmap_atomic(addr); kunmap_atomic(addr);
} }
......
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