Linux 5.15.133
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.15.133 kernel.
All users of the 5.15 kernel series must upgrade.
The updated 5.15.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.15.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/arm64/silicon-errata.rst | 3 Makefile | 2 arch/arm/kernel/hw_breakpoint.c | 8 arch/arm/kernel/machine_kexec.c | 14 arch/arm64/boot/dts/qcom/sm6125-sony-xperia-seine-pdx201.dts | 2 arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi | 2 arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi | 2 arch/arm64/kernel/hw_breakpoint.c | 4 arch/mips/Makefile | 2 arch/mips/vdso/Makefile | 2 arch/powerpc/platforms/pseries/ibmebus.c | 1 arch/x86/boot/compressed/ident_map_64.c | 8 arch/x86/include/asm/boot.h | 45 arch/x86/purgatory/Makefile | 4 crypto/lrw.c | 6 crypto/xts.c | 6 drivers/acpi/acpica/psopcode.c | 2 drivers/acpi/arm64/iort.c | 5 drivers/acpi/video_detect.c | 9 drivers/acpi/x86/s2idle.c | 6 drivers/ata/ahci.c | 9 drivers/ata/libata-sata.c | 19 drivers/bus/ti-sysc.c | 2 drivers/char/tpm/tpm_tis_core.c | 15 drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 18 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 21 drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c | 4 drivers/gpu/drm/bridge/tc358762.c | 2 drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 drivers/gpu/drm/tiny/gm12u320.c | 10 drivers/i2c/busses/i2c-aspeed.c | 7 drivers/interconnect/core.c | 18 drivers/md/raid1.c | 3 drivers/media/pci/cx23885/cx23885-video.c | 2 drivers/media/pci/intel/ipu3/ipu3-cio2-main.c | 2 drivers/media/tuners/qt1010.c | 11 drivers/media/usb/dvb-usb-v2/af9035.c | 14 drivers/media/usb/dvb-usb-v2/anysee.c | 2 drivers/media/usb/dvb-usb-v2/az6007.c | 8 drivers/media/usb/dvb-usb-v2/gl861.c | 2 drivers/media/usb/dvb-usb/af9005.c | 5 drivers/media/usb/dvb-usb/dw2102.c | 24 drivers/mmc/host/sdhci-esdhc-imx.c | 7 drivers/mtd/nand/raw/brcmnand/brcmnand.c | 102 - drivers/mtd/nand/raw/brcmnand/brcmnand.h | 29 drivers/net/ethernet/atheros/alx/ethtool.c | 5 drivers/net/wireless/ath/ath9k/ahb.c | 4 drivers/net/wireless/ath/ath9k/mac.h | 6 drivers/net/wireless/ath/ath9k/pci.c | 4 drivers/net/wireless/ath/ath9k/xmit.c | 4 drivers/net/wireless/ath/wil6210/txrx.c | 2 drivers/net/wireless/ath/wil6210/txrx.h | 6 drivers/net/wireless/ath/wil6210/txrx_edma.c | 2 drivers/net/wireless/ath/wil6210/txrx_edma.h | 6 drivers/net/wireless/mac80211_hwsim.c | 7 drivers/net/wireless/marvell/mwifiex/tdls.c | 9 drivers/pci/controller/dwc/pcie-fu740.c | 1 drivers/perf/arm_smmuv3_pmu.c | 46 drivers/perf/fsl_imx8_ddr_perf.c | 21 drivers/scsi/lpfc/lpfc_debugfs.c | 14 drivers/scsi/megaraid/megaraid_sas.h | 2 drivers/scsi/megaraid/megaraid_sas_base.c | 21 drivers/scsi/pm8001/pm8001_init.c | 51 drivers/scsi/qla2xxx/qla_dfs.c | 6 drivers/target/iscsi/iscsi_target_configfs.c | 54 drivers/tty/serial/cpm_uart/cpm_uart_core.c | 13 drivers/usb/cdns3/cdns3-plat.c | 3 drivers/usb/cdns3/cdnsp-pci.c | 3 drivers/usb/cdns3/core.c | 15 drivers/usb/cdns3/core.h | 7 drivers/usb/gadget/udc/fsl_qe_udc.c | 6 drivers/usb/host/ehci-hcd.c | 8 drivers/usb/host/ehci-hub.c | 10 drivers/usb/host/ehci.h | 10 fs/attr.c | 20 fs/autofs/waitq.c | 3 fs/btrfs/ctree.h | 2 fs/btrfs/delayed-inode.c | 19 fs/btrfs/disk-io.c | 8 fs/btrfs/extent-tree.c | 5 fs/btrfs/ioctl.c | 8 fs/btrfs/volumes.c | 8 fs/btrfs/volumes.h | 3 fs/ext2/xattr.c | 4 fs/ext4/namei.c | 26 fs/jbd2/checkpoint.c | 6 fs/jbd2/commit.c | 49 fs/jbd2/journal.c | 34 fs/jbd2/recovery.c | 42 fs/jbd2/revoke.c | 8 fs/jbd2/transaction.c | 114 - fs/jfs/jfs_dmap.c | 1 fs/jfs/jfs_imap.c | 1 fs/locks.c | 2 fs/nfsd/nfs4proc.c | 4 fs/overlayfs/copy_up.c | 3 fs/overlayfs/file.c | 9 fs/tracefs/inode.c | 3 include/linux/acpi_iort.h | 1 include/linux/jbd2.h | 11 include/linux/libata.h | 4 include/linux/perf_event.h | 22 include/linux/sched/task.h | 28 include/uapi/linux/netfilter_bridge/ebtables.h | 14 kernel/fork.c | 8 kernel/printk/printk.c | 35 kernel/printk/printk_safe.c | 9 kernel/rcu/rcuscale.c | 2 kernel/scftorture.c | 6 kernel/trace/trace.c | 41 lib/kobject.c | 5 lib/mpi/mpi-cmp.c | 8 net/bridge/netfilter/ebtables.c | 3 net/core/devlink.c | 4 net/mac80211/rx.c | 4 net/sched/Kconfig | 28 net/sched/Makefile | 2 net/sched/cls_rsvp.c | 24 net/sched/cls_rsvp.h | 776 ---------- net/sched/cls_rsvp6.c | 24 samples/hw_breakpoint/data_breakpoint.c | 4 sound/hda/intel-dsp-config.c | 8 tools/iio/iio_generic_buffer.c | 17 tools/perf/tests/shell/stat_bpf_counters.sh | 6 tools/testing/selftests/ftrace/ftracetest | 8 125 files changed, 970 insertions(+), 1334 deletions(-)
Abhishek Mainkar (1):
ACPICA: Add AML_NO_OPERAND_RESOLVE flag to Timer
Alexander Steffen (1):
tpm_tis: Resend command to recover from data transfer errors
Amir Goldstein (2):
ovl: fix failed copyup of fileattr on a symlink
ovl: fix incorrect fdput() on aio completion
Anand Jain (2):
btrfs: add a helper to read the superblock metadata_uuid
btrfs: compare the correct fsid/metadata_uuid in btrfs_validate_super
Andrew Kanner (1):
fs/jfs: prevent double-free in dbUnmount() after failed jfs_remount()
Arnd Bergmann (1):
samples/hw_breakpoint: fix building without module unloading
Azeem Shaikh (1):
crypto: lrw,xts - Replace strlcpy with strscpy
Chenyuan Mi (1):
tools: iio: iio_generic_buffer: Fix some integer type and calculation
Christian Brauner (1):
attr: block mode changes of symlinks
Christian König (1):
drm/amdgpu: fix amdgpu_cs_p1_user_fence
Christophe Leroy (1):
serial: cpm_uart: Avoid suspicious locking
Damien Le Moal (1):
scsi: pm8001: Setup IRQs on resume
Dmitry Antipov (3):
wifi: ath9k: fix fortify warnings
wifi: mwifiex: fix fortify warning
wifi: wil6210: fix fortify warnings
Dongliang Mu (1):
wifi: ath9k: fix printk specifier
Fedor Pchelkin (1):
autofs: fix memory leak of waitqueues in autofs_catatonic_mode
Filipe Manana (2):
btrfs: fix lockdep splat and potential deadlock after failure running delayed items
btrfs: release path before inode lookup during the ino lookup ioctl
Florian Fainelli (1):
mtd: rawnand: brcmnand: Allow SoC to provide I/O operations
GONG, Ruiqi (2):
alx: fix OOB-read compiler warning
netfilter: ebtables: fix fortify warnings in size_entry_mwt()
Georg Ottinger (1):
ext2: fix datatype of block number in ext2_xattr_set2()
Giulio Benetti (1):
mmc: sdhci-esdhc-imx: improve ESDHC_FLAG_ERR010450
Greg Kroah-Hartman (1):
Linux 5.15.133
Hans Verkuil (2):
media: tuners: qt1010: replace BUG_ON with a regular error
media: pci: cx23885: replace BUG with error return
Jamal Hadi Salim (1):
net/sched: Retire rsvp classifier
James Clark (1):
perf test: Remove bash construct from stat_bpf_counters.sh test
Jan Kara (1):
jbd2: rename jbd_debug() to jbd2_debug()
Jeff Layton (1):
nfsd: fix change_info in NFSv4 RENAME replies
Jinjie Ruan (3):
drm: gm12u320: Fix the timeout usage for usb_bulk_msg()
scsi: qla2xxx: Fix NULL vs IS_ERR() bug for debugfs_create_dir()
scsi: lpfc: Fix the NULL vs IS_ERR() bug for debugfs_create_file()
Jiri Pirko (1):
devlink: remove reload failed checks in params get/set callbacks
Jiri Slaby (SUSE) (1):
ACPI: video: Add backlight=native DMI quirk for Lenovo Ideapad Z470
Johannes Berg (2):
wifi: mac80211: check S1G action frame size
wifi: mac80211_hwsim: drop short frames
John Ogness (1):
printk: Consolidate console deferred printing
Josef Bacik (1):
btrfs: move btrfs_pinned_by_swapfile prototype into volumes.h
Junxiao Bi (1):
scsi: megaraid_sas: Fix deadlock on firmware crashdump
Kirill A. Shutemov (1):
x86/boot/compressed: Reserve more memory for page tables
Konstantin Shelekhin (1):
scsi: target: iscsi: Fix buffer overflow in lio_target_nacl_info_show()
Krzysztof Kozlowski (3):
arm64: dts: qcom: sm6125-pdx201: correct ramoops pmsg-size
arm64: dts: qcom: sm8150-kumano: correct ramoops pmsg-size
arm64: dts: qcom: sm8250-edo: correct ramoops pmsg-size
Leo Chen (1):
drm/amd/display: Blocking invalid 420 modes on HDMI TMDS for DCN31
Liu Shixin via Jfs-discussion (1):
jfs: fix invalid free of JFS_IP(ipimap)->i_imap in diUnmount
Ma Ke (1):
usb: gadget: fsl_qe_udc: validate endpoint index for ch9 udc
Marek Vasut (1):
drm/bridge: tc358762: Instruct DSI host to generate HSE packets
Mario Limonciello (1):
ACPI: x86: s2idle: Catch multiple ACPI_TYPE_PACKAGE objects
Mark O'Donovan (1):
crypto: lib/mpi - avoid null pointer deref in mpi_cmp_ui()
Masami Hiramatsu (Google) (1):
selftests: tracing: Fix to unmount tracefs for recovering environment
Melissa Wen (1):
drm/amd/display: enable cursor degamma for DCN3+ DRM legacy gamma
Mårten Lindahl (1):
ARM: 9317/1: kexec: Make smp stop calls asynchronous
Namhyung Kim (1):
perf test shell stat_bpf_counters: Fix test on Intel
Nigel Croxon (1):
md/raid1: fix error: ISO C90 forbids mixed declarations
Niklas Cassel (1):
ata: libata: disallow dev-initiated LPM transitions to unsupported states
Paul E. McKenney (1):
scftorture: Forgive memory-allocation failure if KASAN
Pierre-Louis Bossart (1):
ALSA: hda: intel-dsp-cfg: add LunarLake support
Qu Wenruo (1):
btrfs: output extra debug info if we failed to find an inline backref
Ritesh Harjani (3):
jbd2: refactor wait logic for transaction updates into a common function
jbd2: fix use-after-free of transaction_t race
jbd2: kill t_handle_lock transaction spinlock
Rob Clark (2):
interconnect: Fix locking for runpm vs reclaim
interconnect: Teach lockdep about icc_bw_lock order
Rong Tao (1):
samples/hw_breakpoint: Fix kernel BUG 'invalid opcode: 0000'
Sakari Ailus (1):
media: pci: ipu3-cio2: Initialise timing struct to avoid a compiler warning
Shida Zhang (1):
ext4: fix rec_len verify error
Song Liu (1):
x86/purgatory: Remove LTO flags
Steven Rostedt (Google) (4):
tracing: Have tracing_max_latency inc the trace array ref count
tracing: Have current_trace inc the trace array ref count
tracing: Have option files inc the trace array ref count
tracefs: Add missing lockdown check to tracefs_create_dir()
Tiezhu Yang (1):
MIPS: Use "grep -E" instead of "egrep"
Tomislav Novak (1):
hw_breakpoint: fix single-stepping when using bpf_overflow_handler
Tommy Huang (1):
i2c: aspeed: Reset the i2c controller when timeout occurs
Tony Lindgren (1):
bus: ti-sysc: Configure uart quirks for k3 SoC
Tuo Li (1):
drm/exynos: fix a possible null-pointer dereference due to data race in exynos_drm_crtc_atomic_disable()
Wander Lairson Costa (1):
kernel/fork: beware of __put_task_struct() calling context
Will Shiu (1):
locks: fix KASAN: use-after-free in trace_event_raw_event_filelock_lock
William Zhang (1):
mtd: rawnand: brcmnand: Fix ECC level field setting for v7.2 controller
Xiaolei Wang (1):
usb: cdns3: Put the cdns set active part outside the spin lock
Xu Yang (2):
perf/imx_ddr: speed up overflow frequency of cycle
usb: ehci: add workaround for chipidea PORTSC.PEC bug
Yicong Yang (1):
perf/smmuv3: Enable HiSilicon Erratum 162001900 quirk for HIP08/09
Yifan Zhang (1):
drm/amd/display: fix the white screen issue when >= 64GB DRAM
Yong-Xuan Wang (1):
PCI: fu740: Set the number of MSI vectors
Zhang Shurong (7):
md: raid1: fix potential OOB in raid1_remove_disk()
media: dvb-usb-v2: af9035: Fix null-ptr-deref in af9035_i2c_master_xfer
media: dw2102: Fix null-ptr-deref in dw2102_i2c_transfer()
media: af9005: Fix null-ptr-deref in af9005_i2c_xfer
media: anysee: fix null-ptr-deref in anysee_master_xfer
media: az6007: Fix null-ptr-deref in az6007_i2c_xfer()
media: dvb-usb-v2: gl861: Fix null-ptr-deref in gl861_i2c_master_xferZhang Yi (1):
jbd2: correct the end of the journal recovery scan range
Zhen Lei (1):
kobject: Add sanity check for kset->kobj.ktype in kset_register()
Zqiang (1):
rcuscale: Move rcu_scale_writer() schedule_timeout_uninterruptible() to _idle()
ruanjinjie (1):
powerpc/pseries: fix possible memory leak in ibmebus_bus_init()
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +3 -0
@@ -172,6 +172,9 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | Hisilicon | Hip08 SMMU PMCG | #162001800 | N/A | +----------------+-----------------+-----------------+-----------------------------+ +| Hisilicon | Hip08 SMMU PMCG | #162001900 | N/A | +| | Hip09 SMMU PMCG | | | ++----------------+-----------------+-----------------+-----------------------------+ +----------------+-----------------+-----------------+-----------------------------+ | Qualcomm Tech. | Kryo/Falkor v1 | E1003 | QCOM_FALKOR_ERRATUM_1003 | +----------------+-----------------+-----------------+-----------------------------+
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 15 -SUBLEVEL = 132 +SUBLEVEL = 133 EXTRAVERSION = NAME = Trick or Treat
arch/arm/kernel/hw_breakpoint.c +4 -4
@@ -626,7 +626,7 @@ int hw_breakpoint_arch_parse(struct perf_event *bp, hw->address &= ~alignment_mask; hw->ctrl.len <<= offset; -if (is_default_overflow_handler (bp)) { +if (uses_default_overflow_handler (bp)) {/* * Mismatch breakpoints are required for single-stepping * breakpoints.
@@ -798,7 +798,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr,* Otherwise, insert a temporary mismatch breakpoint so that * we can single-step over the watchpoint trigger. */ -if (!is_default_overflow_handler (wp)) +if (!uses_default_overflow_handler (wp))continue ; step:enable_single_step (wp,instruction_pointer (regs));
@@ -811,7 +811,7 @@ static void watchpoint_handler(unsigned long addr, unsigned int fsr, info->trigger = addr;pr_debug ("watchpoint fired: address = 0x%x\n" , info->trigger);perf_bp_event (wp, regs); -if (is_default_overflow_handler (wp)) +if (uses_default_overflow_handler (wp))enable_single_step (wp,instruction_pointer (regs)); }
@@ -886,7 +886,7 @@ static void breakpoint_handler(unsigned long unknown, struct pt_regs *regs) info->trigger = addr;pr_debug ("breakpoint fired: address = 0x%x\n" , addr);perf_bp_event (bp, regs); -if (is_default_overflow_handler (bp)) +if (uses_default_overflow_handler (bp))enable_single_step (bp, addr); goto unlock; }
arch/arm/kernel/machine_kexec.c +13 -1
@@ -92,16 +92,28 @@ void machine_crash_nonpanic_core(void *unused) } } +static DEFINE_PER_CPU(call_single_data_t, cpu_stop_csd) = +CSD_INIT (machine_crash_nonpanic_core, NULL); +void crash_smp_send_stop (void ) {static int cpus_stopped;unsigned long msecs; +call_single_data_t *csd; +int cpu, this_cpu =raw_smp_processor_id ();if (cpus_stopped)return ;atomic_set (&waiting_for_crash_ipi,num_online_cpus () -1 ); -smp_call_function (machine_crash_nonpanic_core,NULL , false); +for_each_online_cpu (cpu) { +if (cpu == this_cpu) +continue ; + + csd = &per_cpu (cpu_stop_csd, cpu); +smp_call_function_single_async (cpu, csd); + } + msecs =1000 ;/* Wait at most a second for the other cpus to stop */ while ((atomic_read (&waiting_for_crash_ipi) >0 ) && msecs) {mdelay (1 );
arch/arm64/boot/dts/qcom/sm6125-sony-xperia-seine-pdx201.dts +1 -1
@@ -74,7 +74,7 @@ pstore_mem: ramoops@ffc00000 { reg = <0x0 0xffc40000 0x0 0xc0000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; }; cmdline_mem: memory@ffd00000 {
arch/arm64/boot/dts/qcom/sm8150-sony-xperia-kumano.dtsi +1 -1
@@ -127,7 +127,7 @@ ramoops@ffc00000 { reg = <0x0 0xffc00000 0x0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
arch/arm64/boot/dts/qcom/sm8250-sony-xperia-edo.dtsi +1 -1
@@ -126,7 +126,7 @@ ramoops@ffc00000 { reg = <0x0 0xffc00000 0x0 0x100000>; record-size = <0x1000>; console-size = <0x40000>; - msg-size = <0x20000 0x20000>; + pmsg-size = <0x20000>; ecc-size = <16>; no-map; };
arch/arm64/kernel/hw_breakpoint.c +2 -2
@@ -654,7 +654,7 @@ static int breakpoint_handler(unsigned long unused, unsigned long esr,perf_bp_event (bp, regs);/* Do we need to handle the stepping? */ -if (is_default_overflow_handler (bp)) +if (uses_default_overflow_handler (bp)) step =1 ; unlock:rcu_read_unlock ();
@@ -733,7 +733,7 @@ static u64 get_distance_from_watchpoint(unsigned long addr, u64 val,static int watchpoint_report (struct perf_event *wp,unsigned long addr,struct pt_regs *regs) { -int step =is_default_overflow_handler (wp); +int step =uses_default_overflow_handler (wp);struct arch_hw_breakpoint *info =counter_arch_bp (wp); info->trigger = addr;
arch/mips/Makefile +1 -1
@@ -323,7 +323,7 @@ KBUILD_LDFLAGS += -m $(ld-emul) ifdef need-compiler CHECKFLAGS += $(shell $(CC) $(KBUILD_CFLAGS) -dM -E -x c /dev/null | \ - egrep -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ + grep -E -vw '__GNUC_(MINOR_|PATCHLEVEL_)?_' | \ sed -e "s/^\#define /-D'/" -e "s/ /'='/" -e "s/$$/'/" -e 's/\$$/&&/g') endif
arch/mips/vdso/Makefile +1 -1
@@ -68,7 +68,7 @@ KCOV_INSTRUMENT := n # Check that we don't have PIC 'jalr t9' calls left quiet_cmd_vdso_mips_check = VDSOCHK $@ - cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | egrep -h "jalr.*t9" > /dev/null; \ + cmd_vdso_mips_check = if $(OBJDUMP) --disassemble $@ | grep -E -h "jalr.*t9" > /dev/null; \ then (echo >&2 "$@: PIC 'jalr t9' calls are not supported"; \ rm -f $@; /bin/false); fi
arch/powerpc/platforms/pseries/ibmebus.c +1 -0
@@ -451,6 +451,7 @@ static int __init ibmebus_bus_init(void)if (err) {printk (KERN_WARNING "%s: device_register returned %i\n" , __func__, err); +put_device (&ibmebus_bus_device);bus_unregister (&ibmebus_bus_type);return err;
arch/x86/boot/compressed/ident_map_64.c +8 -0
@@ -67,6 +67,14 @@ static void *alloc_pgt_page(void *context)return NULL ; } +/* Consumed more tables than expected? */ +if (pages->pgt_buf_offset ==BOOT_PGT_SIZE_WARN ) { +debug_putstr ("pgt_buf running low in " __FILE__"\n" ); +debug_putstr ("Need to raise BOOT_PGT_SIZE?\n" ); +debug_putaddr (pages->pgt_buf_offset); +debug_putaddr (pages->pgt_buf_size); + } + entry = pages->pgt_buf + pages->pgt_buf_offset; pages->pgt_buf_offset +=PAGE_SIZE ;
arch/x86/include/asm/boot.h +31 -14
54 lines not on this page · raw message
arch/x86/purgatory/Makefile +4 -0
@@ -19,6 +19,10 @@ CFLAGS_sha256.o := -D__DISABLE_EXPORTS # optimization flags. KBUILD_CFLAGS := $(filter-out -fprofile-sample-use=% -fprofile-use=%,$(KBUILD_CFLAGS)) +# When LTO is enabled, llvm emits many text sections, which is not supported +# by kexec. Remove -flto=* flags. +KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_LTO),$(KBUILD_CFLAGS)) + # When linking purgatory.ro with -r unresolved symbols are not checked, # also link a purgatory.chk binary without -r to check for unresolved symbols. PURGATORY_LDFLAGS := -e purgatory_start -nostdlib -z nodefaultlib
crypto/lrw.c +3 -3
@@ -357,10 +357,10 @@ static int lrw_create(struct crypto_template *tmpl, struct rtattr **tb)* cipher name. */ if (!strncmp (cipher_name,"ecb(" ,4 )) { -unsigned len; +int len; - len =strlcpy (ecb_name, cipher_name +4 ,sizeof (ecb_name)); -if (len <2 || len >=sizeof (ecb_name)) + len =strscpy (ecb_name, cipher_name +4 ,sizeof (ecb_name)); +if (len <2 ) goto err_free_inst;if (ecb_name[len -1 ] !=')' )
crypto/xts.c +3 -3
@@ -396,10 +396,10 @@ static int xts_create(struct crypto_template *tmpl, struct rtattr **tb)* cipher name. */ if (!strncmp (cipher_name,"ecb(" ,4 )) { -unsigned len; +int len; - len =strlcpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); -if (len <2 || len >=sizeof (ctx->name)) + len =strscpy (ctx->name, cipher_name +4 ,sizeof (ctx->name)); +if (len <2 ) goto err_free_inst;if (ctx->name[len -1 ] !=')' )
drivers/acpi/acpica/psopcode.c +1 -1
@@ -603,7 +603,7 @@ const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = {/* 7E */ ACPI_OP ("Timer" ,ARGP_TIMER_OP ,ARGI_TIMER_OP ,ACPI_TYPE_ANY ,AML_CLASS_EXECUTE ,AML_TYPE_EXEC_0A_0T_1R , - AML_FLAGS_EXEC_0A_0T_1R), + AML_FLAGS_EXEC_0A_0T_1R | AML_NO_OPERAND_RESOLVE),/* ACPI 5.0 opcodes */
drivers/acpi/arm64/iort.c +4 -1
@@ -1381,7 +1381,10 @@ static void __init arm_smmu_v3_pmcg_init_resources(struct resource *res,static struct acpi_platform_list pmcg_plat_info[]__initdata = {/* HiSilicon Hip08 Platform */ {"HISI " ,"HIP08 " ,0 ,ACPI_SIG_IORT , greater_than_or_equal, -"Erratum #162001800" ,IORT_SMMU_V3_PMCG_HISI_HIP08 }, +"Erratum #162001800, Erratum #162001900" ,IORT_SMMU_V3_PMCG_HISI_HIP08 }, +/* HiSilicon Hip09 Platform */ + {"HISI " ,"HIP09 " ,0 ,ACPI_SIG_IORT , greater_than_or_equal, +"Erratum #162001900" ,IORT_SMMU_V3_PMCG_HISI_HIP09 }, { } };
drivers/acpi/video_detect.c +9 -0
@@ -307,6 +307,15 @@ static const struct dmi_system_id video_detect_dmi_table[] = { DMI_MATCH(DMI_BOARD_NAME, "Lenovo IdeaPad S405"), }, }, + { +/* https://bugzilla.suse.com/show_bug.cgi?id=1208724 */ + .callback = video_detect_force_native, +/* Lenovo Ideapad Z470 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"LENOVO" ), + DMI_MATCH(DMI_PRODUCT_VERSION, "IdeaPad Z470"), + }, + }, {/* https://bugzilla.redhat.com/show_bug.cgi?id=1187004 */ .callback = video_detect_force_native,
drivers/acpi/x86/s2idle.c +6 -0
@@ -111,6 +111,12 @@ static void lpi_device_get_constraints_amd(void)union acpi_object *package = &out_obj->package.elements[i];if (package->type ==ACPI_TYPE_PACKAGE ) { +if (lpi_constraints_table) { +acpi_handle_err (lps0_device_handle, +"Duplicate constraints list\n" ); + goto free_acpi_buffer; + } + lpi_constraints_table =kcalloc (package->package.count,sizeof (*lpi_constraints_table),GFP_KERNEL );
drivers/ata/ahci.c +9 -0
@@ -1886,6 +1886,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)else dev_info (&pdev->dev,"SSS flag set, parallel bus scan disabled\n" ); +if (!(hpriv->cap &HOST_CAP_PART )) + host->flags |=ATA_HOST_NO_PART ; + +if (!(hpriv->cap &HOST_CAP_SSC )) + host->flags |=ATA_HOST_NO_SSC ; + +if (!(hpriv->cap2 &HOST_CAP2_SDS )) + host->flags |=ATA_HOST_NO_DEVSLP ; +if (pi.flags &ATA_FLAG_EM )ahci_reset_em (host);
drivers/ata/libata-sata.c +16 -3
@@ -394,10 +394,23 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,case ATA_LPM_MED_POWER_WITH_DIPM :case ATA_LPM_MIN_POWER_WITH_PARTIAL :case ATA_LPM_MIN_POWER : -if (ata_link_nr_enabled (link) >0 ) -/* no restrictions on LPM transitions */ +if (ata_link_nr_enabled (link) >0 ) { +/* assume no restrictions on LPM transitions */ scontrol &= ~(0x7 <<8 ); -else { + +/* +* If the controller does not support partial, slumber, +* or devsleep, then disallow these transitions. +*/ +if (link->ap->host->flags &ATA_HOST_NO_PART ) + scontrol |= (0x1 <<8 ); + +if (link->ap->host->flags &ATA_HOST_NO_SSC ) + scontrol |= (0x2 <<8 ); + +if (link->ap->host->flags &ATA_HOST_NO_DEVSLP ) + scontrol |= (0x4 <<8 ); + }else {/* empty port, power off */ scontrol &= ~0xf ; scontrol |= (0x1 <<2 );
drivers/bus/ti-sysc.c +2 -0
@@ -1504,6 +1504,8 @@ static const struct sysc_revision_quirk sysc_revision_quirks[] = { SYSC_QUIRK_SWSUP_SIDLE | SYSC_QUIRK_LEGACY_IDLE),SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47422e03 ,0xffffffff ,SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ), +SYSC_QUIRK ("uart" ,0 ,0x50 ,0x54 ,0x58 ,0x47424e03 ,0xffffffff , +SYSC_QUIRK_SWSUP_SIDLE |SYSC_QUIRK_LEGACY_IDLE ),/* Quirks that need to be set based on the module address */ SYSC_QUIRK("mcpdm", 0x40132000, 0, 0x10, -ENODEV, 0x50000800, 0xffffffff,
drivers/char/tpm/tpm_tis_core.c +11 -4
@@ -469,10 +469,17 @@ static int tpm_tis_send_main(struct tpm_chip *chip, const u8 *buf, size_t len)int rc;u32 ordinal;unsigned long dur; - - rc =tpm_tis_send_data (chip, buf, len); -if (rc <0 ) -return rc; +unsigned int try; + +for (try =0 ; try <TPM_RETRY ; try++) { + rc =tpm_tis_send_data (chip, buf, len); +if (rc >=0 ) +/* Data transfer done successfully */ +break ; +else if (rc != -EIO ) +/* Data transfer failed, not recoverable */ +return rc; + }/* go and do it */ rc =tpm_tis_write8 (priv,TPM_STS (priv->locality),TPM_STS_GO );
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +4 -14
@@ -45,7 +45,6 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,struct drm_gem_object *gobj;struct amdgpu_bo *bo;unsigned long size; -int r; gobj =drm_gem_object_lookup (p->filp, data->handle);if (gobj ==NULL )
@@ -60,23 +59,14 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,drm_gem_object_put (gobj); size =amdgpu_bo_size (bo); -if (size !=PAGE_SIZE || (data->offset +8 ) > size) { - r = -EINVAL ; - goto error_unref; - } +if (size !=PAGE_SIZE || data->offset > (size -8 )) +return -EINVAL ; -if (amdgpu_ttm_tt_get_usermm (bo->tbo.ttm)) { - r = -EINVAL ; - goto error_unref; - } +if (amdgpu_ttm_tt_get_usermm (bo->tbo.ttm)) +return -EINVAL ; *offset = data->offset; -return 0 ; - -error_unref: -amdgpu_bo_unref (&bo); -return r; } static int amdgpu_cs_bo_handles_chunk(struct amdgpu_cs_parser *p,
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +16 -5
@@ -1204,11 +1204,15 @@ static void mmhub_read_system_context(struct amdgpu_device *adev, struct dc_phy_ agp_top = adev->gmc.agp_end >>24 ; - page_table_start.high_part = (u32)(adev->gmc.gart_start >>44 ) &0xF ; - page_table_start.low_part = (u32)(adev->gmc.gart_start >>12 ); - page_table_end.high_part = (u32)(adev->gmc.gart_end >>44 ) &0xF ; - page_table_end.low_part = (u32)(adev->gmc.gart_end >>12 ); - page_table_base.high_part =upper_32_bits (pt_base) &0xF ; + page_table_start.high_part =upper_32_bits (adev->gmc.gart_start >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_start.low_part =lower_32_bits (adev->gmc.gart_start >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_end.high_part =upper_32_bits (adev->gmc.gart_end >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_end.low_part =lower_32_bits (adev->gmc.gart_end >> +AMDGPU_GPU_PAGE_SHIFT ); + page_table_base.high_part =upper_32_bits (pt_base); page_table_base.low_part =lower_32_bits (pt_base); pa_config->system_aperture.start_addr = (uint64_t )logical_addr_low <<18 ;
@@ -8790,6 +8794,13 @@ static void handle_cursor_update(struct drm_plane *plane, attributes.rotation_angle =0 ; attributes.attribute_flags.value =0 ; +/* Enable cursor degamma ROM on DCN3+ for implicit sRGB degamma in DRM +* legacy gamma setup. +*/ +if (crtc_state->cm_is_degamma_srgb && + adev->dm.dc->caps.color.dpp.gamma_corr) + attributes.attribute_flags.bits.ENABLE_CURSOR_DEGAMMA =1 ; + attributes.pitch = afb->base.pitches[0 ] / afb->base.format->cpp[0 ];if (crtc_state->stream) {
drivers/gpu/drm/amd/display/dc/dml/dcn31/display_mode_vba_31.c +3 -1
@@ -4162,7 +4162,9 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l }if (v->OutputFormat[k] == dm_420 && v->HActive[k] >DCN31_MAX_FMT_420_BUFFER_WIDTH && v->ODMCombineEnablePerState[i][k] != dm_odm_combine_mode_4to1) { -if (v->HActive[k] /2 >DCN31_MAX_FMT_420_BUFFER_WIDTH ) { +if (v->Output[k] == dm_hdmi) { + FMTBufferExceeded = true; + }else if (v->HActive[k] /2 >DCN31_MAX_FMT_420_BUFFER_WIDTH ) { v->ODMCombineEnablePerState[i][k] = dm_odm_combine_mode_4to1; v->PlaneRequiredDISPCLK = v->PlaneRequiredDISPCLKWithODMCombine4To1;
drivers/gpu/drm/bridge/tc358762.c +1 -1
@@ -224,7 +224,7 @@ static int tc358762_probe(struct mipi_dsi_device *dsi) dsi->lanes =1 ; dsi->format =MIPI_DSI_FMT_RGB888 ; dsi->mode_flags =MIPI_DSI_MODE_VIDEO |MIPI_DSI_MODE_VIDEO_SYNC_PULSE | -MIPI_DSI_MODE_LPM ; +MIPI_DSI_MODE_LPM |MIPI_DSI_MODE_VIDEO_HSE ; ret =tc358762_parse_dt (ctx);if (ret <0 )
drivers/gpu/drm/exynos/exynos_drm_crtc.c +2 -3
@@ -39,13 +39,12 @@ static void exynos_drm_crtc_atomic_disable(struct drm_crtc *crtc,if (exynos_crtc->ops->atomic_disable) exynos_crtc->ops->atomic_disable (exynos_crtc); +spin_lock_irq (&crtc->dev->event_lock);if (crtc->state->event && !crtc->state->active) { -spin_lock_irq (&crtc->dev->event_lock);drm_crtc_send_vblank_event (crtc, crtc->state->event); -spin_unlock_irq (&crtc->dev->event_lock); - crtc->state->event =NULL ; } +spin_unlock_irq (&crtc->dev->event_lock); } static int exynos_crtc_atomic_check(struct drm_crtc *crtc,
drivers/gpu/drm/tiny/gm12u320.c +5 -5
@@ -67,10 +67,10 @@ MODULE_PARM_DESC(eco_mode, "Turn on Eco mode (less bright, more silent)");#define READ_STATUS_SIZE 13#define MISC_VALUE_SIZE 4 -#define CMD_TIMEOUT msecs_to_jiffies(200) -#define DATA_TIMEOUT msecs_to_jiffies(1000) -#define IDLE_TIMEOUT msecs_to_jiffies(2000) -#define FIRST_FRAME_TIMEOUT msecs_to_jiffies(2000) +#define CMD_TIMEOUT 200 +#define DATA_TIMEOUT 1000 +#define IDLE_TIMEOUT 2000 +#define FIRST_FRAME_TIMEOUT 2000#define MISC_REQ_GET_SET_ECO_A 0xff#define MISC_REQ_GET_SET_ECO_B 0x35
@@ -386,7 +386,7 @@ static void gm12u320_fb_update_work(struct work_struct *work)* switches back to showing its logo. */ queue_delayed_work (system_long_wq, &gm12u320->fb_update.work, -IDLE_TIMEOUT ); +msecs_to_jiffies (IDLE_TIMEOUT ));return ; err:
drivers/i2c/busses/i2c-aspeed.c +5 -2
@@ -693,13 +693,16 @@ static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,if (time_left ==0 ) {/* -* If timed out and bus is still busy in a multi master -* environment, attempt recovery at here. +* In a multi-master setup, if a timeout occurs, attempt +* recovery. But if the bus is idle, we still need to reset the +* i2c controller to clear the remaining interrupts. */ if (bus->multi_master && (readl (bus->base +ASPEED_I2C_CMD_REG ) &ASPEED_I2CD_BUS_BUSY_STS ))aspeed_i2c_recover_bus (bus); +else +aspeed_i2c_reset (bus);/* * If timed out and the state is still pending, drop the pending
drivers/interconnect/core.c +15 -3
@@ -29,6 +29,7 @@ static LIST_HEAD(icc_providers);static int providers_count;static bool synced_state;static DEFINE_MUTEX (icc_lock); +static DEFINE_MUTEX (icc_bw_lock);static struct dentry *icc_debugfs_dir;static void icc_summary_show_one (struct seq_file *s,struct icc_node *n)
@@ -632,7 +633,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)if (WARN_ON (IS_ERR (path) || !path->num_nodes))return -EINVAL ; -mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); old_avg = path->reqs[0 ].avg_bw; old_peak = path->reqs[0 ].peak_bw;
@@ -664,7 +665,7 @@ int icc_set_bw(struct icc_path *path, u32 avg_bw, u32 peak_bw)apply_constraints (path); } -mutex_unlock (&icc_lock); +mutex_unlock (&icc_bw_lock);trace_icc_set_bw_end (path, ret);
@@ -967,6 +968,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider)return ;mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); node->provider = provider;list_add_tail (&node->node_list, &provider->nodes);
@@ -992,6 +994,7 @@ void icc_node_add(struct icc_node *node, struct icc_provider *provider) node->avg_bw =0 ; node->peak_bw =0 ; +mutex_unlock (&icc_bw_lock);mutex_unlock (&icc_lock); }EXPORT_SYMBOL_GPL (icc_node_add);
@@ -1119,6 +1122,7 @@ void icc_sync_state(struct device *dev)return ;mutex_lock (&icc_lock); +mutex_lock (&icc_bw_lock); synced_state = true;list_for_each_entry (p, &icc_providers, provider_list) {dev_dbg (p->dev,"interconnect provider is in synced state\n" );
@@ -1131,13 +1135,21 @@ void icc_sync_state(struct device *dev) } } } +mutex_unlock (&icc_bw_lock);mutex_unlock (&icc_lock); }EXPORT_SYMBOL_GPL (icc_sync_state);static int __init icc_init (void ) { -struct device_node *root =of_find_node_by_path ("/" ); +struct device_node *root; + +/* Teach lockdep about lock ordering wrt. shrinker: */ +fs_reclaim_acquire (GFP_KERNEL ); +might_lock (&icc_bw_lock); +fs_reclaim_release (GFP_KERNEL ); + + root =of_find_node_by_path ("/" ); providers_count =of_count_icc_providers (root);of_node_put (root);
drivers/md/raid1.c +3 -0
@@ -1822,6 +1822,9 @@ static int raid1_remove_disk(struct mddev *mddev, struct md_rdev *rdev)int number = rdev->raid_disk;struct raid1_info *p = conf->mirrors + number; +if (unlikely (number >= conf->raid_disks)) + goto abort; +if (rdev != p->rdev) p = conf->mirrors + conf->raid_disks + number;
drivers/media/pci/cx23885/cx23885-video.c +1 -1
@@ -413,7 +413,7 @@ static int buffer_prepare(struct vb2_buffer *vb) dev->height >> 1);break ;default : -BUG (); +return -EINVAL ;/* should not happen */ } dprintk(2, "[%p/%d] buffer_init - %dx%d %dbpp 0x%08x - dma=0x%08lx\n", buf, buf->vb.vb2_buf.index,
drivers/media/pci/intel/ipu3/ipu3-cio2-main.c +1 -1
@@ -345,7 +345,7 @@ static int cio2_hw_init(struct cio2_device *cio2, struct cio2_queue *q)void __iomem *const base = cio2->base;u8 lanes, csi2bus = q->csi2.port;u8 sensor_vc =SENSOR_VIR_CH_DFLT ; -struct cio2_csi2_timing timing; +struct cio2_csi2_timing timing = {0 };int i, r; fmt =cio2_find_format (NULL , &q->subdev_fmt.code);
drivers/media/tuners/qt1010.c +6 -5
@@ -345,11 +345,12 @@ static int qt1010_init(struct dvb_frontend *fe)else valptr = &tmpval; -BUG_ON (i >=ARRAY_SIZE (i2c_data) -1 ); - - err =qt1010_init_meas1 (priv, i2c_data[i+1 ].reg, - i2c_data[i].reg, - i2c_data[i].val, valptr); +if (i >=ARRAY_SIZE (i2c_data) -1 ) + err = -EIO ; +else + err =qt1010_init_meas1 (priv, i2c_data[i +1 ].reg, + i2c_data[i].reg, + i2c_data[i].val, valptr); i++;break ; }
drivers/media/usb/dvb-usb-v2/af9035.c +8 -6
@@ -270,6 +270,7 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap,struct dvb_usb_device *d =i2c_get_adapdata (adap);struct state *state =d_to_priv (d);int ret; +u32 reg;if (mutex_lock_interruptible (&d->i2c_mutex) <0 )return -EAGAIN ;
@@ -322,8 +323,10 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { +if (msg[0 ].len <3 || msg[1 ].len <1 ) +return -EOPNOTSUPP ;/* demod access via firmware interface */ -u32 reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | + reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];if (msg[0 ].addr == state->af9033_i2c_addr[1 ])
@@ -381,17 +384,16 @@ static int af9035_i2c_master_xfer(struct i2c_adapter *adap, ret = -EOPNOTSUPP ; }else if ((msg[0 ].addr == state->af9033_i2c_addr[0 ]) || (msg[0 ].addr == state->af9033_i2c_addr[1 ])) { +if (msg[0 ].len <3 ) +return -EOPNOTSUPP ;/* demod access via firmware interface */ -u32 reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | + reg = msg[0 ].buf[0 ] <<16 | msg[0 ].buf[1 ] <<8 | msg[0 ].buf[2 ];if (msg[0 ].addr == state->af9033_i2c_addr[1 ]) reg |=0x100000 ; - ret = (msg[0 ].len >=3 ) ?af9035_wr_regs (d, reg, - &msg[0 ].buf[3 ], - msg[0 ].len -3 ) - : -EOPNOTSUPP ; + ret =af9035_wr_regs (d, reg, &msg[0 ].buf[3 ], msg[0 ].len -3 ); }else {/* I2C write */ u8 buf[MAX_XFER_SIZE ];
drivers/media/usb/dvb-usb-v2/anysee.c +1 -1
@@ -202,7 +202,7 @@ static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,while (i < num) {if (num > i +1 && (msg[i+1 ].flags &I2C_M_RD )) { -if (msg[i].len >2 || msg[i+1 ].len >60 ) { +if (msg[i].len !=2 || msg[i +1 ].len >60 ) { ret = -EOPNOTSUPP ;break ; }
drivers/media/usb/dvb-usb-v2/az6007.c +8 -0
@@ -788,6 +788,10 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],if (az6007_xfer_debug)printk (KERN_DEBUG "az6007: I2C W addr=0x%x len=%d\n" , addr, msgs[i].len); +if (msgs[i].len <1 ) { + ret = -EIO ; + goto err; + } req =AZ6007_I2C_WR ; index = msgs[i].buf[0 ]; value = addr | (1 <<8 );
@@ -802,6 +806,10 @@ static int az6007_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],if (az6007_xfer_debug)printk (KERN_DEBUG "az6007: I2C R addr=0x%x len=%d\n" , addr, msgs[i].len); +if (msgs[i].len <1 ) { + ret = -EIO ; + goto err; + } req =AZ6007_I2C_RD ; index = msgs[i].buf[0 ]; value = addr;
drivers/media/usb/dvb-usb-v2/gl861.c +1 -1
@@ -120,7 +120,7 @@ static int gl861_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], }else if (num ==2 && !(msg[0 ].flags &I2C_M_RD ) && (msg[1 ].flags &I2C_M_RD )) {/* I2C write + read */ -if (msg[0 ].len >1 || msg[1 ].len >sizeof (ctx->buf)) { +if (msg[0 ].len !=1 || msg[1 ].len >sizeof (ctx->buf)) { ret = -EOPNOTSUPP ; goto err; }
drivers/media/usb/dvb-usb/af9005.c +5 -0
@@ -422,6 +422,10 @@ static int af9005_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[],if (ret ==0 ) ret =2 ; }else { +if (msg[0 ].len <2 ) { + ret = -EOPNOTSUPP ; + goto unlock; + }/* write one or more registers */ reg = msg[0 ].buf[0 ]; addr = msg[0 ].addr;
@@ -431,6 +435,7 @@ static int af9005_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], ret =1 ; } +unlock:mutex_unlock (&d->i2c_mutex);return ret; }
drivers/media/usb/dvb-usb/dw2102.c +24 -0
@@ -128,6 +128,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],switch (num) {case 2 : +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + }/* read stv0299 register */ value = msg[0 ].buf[0 ];/* register */ for (i =0 ; i < msg[1 ].len; i++) {
@@ -139,6 +143,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],case 1 :switch (msg[0 ].addr) {case 0x68 : +if (msg[0 ].len <2 ) { + num = -EOPNOTSUPP ; +break ; + }/* write to stv0299 register */ buf6[0 ] =0x2a ; buf6[1 ] = msg[0 ].buf[0 ];
@@ -148,6 +156,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],break ;case 0x60 :if (msg[0 ].flags ==0 ) { +if (msg[0 ].len <4 ) { + num = -EOPNOTSUPP ; +break ; + }/* write to tuner pll */ buf6[0 ] =0x2c ; buf6[1 ] =5 ;
@@ -159,6 +171,10 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],dw210x_op_rw (d->udev,0xb2 ,0 ,0 , buf6,7 ,DW210X_WRITE_MSG ); }else { +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + }/* read from tuner */ dw210x_op_rw (d->udev,0xb5 ,0 ,0 , buf6,1 ,DW210X_READ_MSG );
@@ -166,12 +182,20 @@ static int dw2102_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], }break ;case (DW2102_RC_QUERY ): +if (msg[0 ].len <2 ) { + num = -EOPNOTSUPP ; +break ; + }dw210x_op_rw (d->udev,0xb8 ,0 ,0 , buf6,2 ,DW210X_READ_MSG ); msg[0 ].buf[0 ] = buf6[0 ]; msg[0 ].buf[1 ] = buf6[1 ];break ;case (DW2102_VOLTAGE_CTRL ): +if (msg[0 ].len <1 ) { + num = -EOPNOTSUPP ; +break ; + } buf6[0 ] =0x30 ; buf6[1 ] = msg[0 ].buf[0 ]; dw210x_op_rw(d->udev, 0xb2, 0, 0,
drivers/mmc/host/sdhci-esdhc-imx.c +4 -3
@@ -171,8 +171,8 @@#define ESDHC_FLAG_HS400 BIT(9)/* * The IP has errata ERR010450 -* uSDHC: Due to the I/O timing limit, for SDR mode, SD card clock can't -* exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz. +* uSDHC: At 1.8V due to the I/O timing limit, for SDR mode, SD card +* clock can't exceed 150MHz, for DDR mode, SD card clock can't exceed 45MHz. */ #define ESDHC_FLAG_ERR010450 BIT(10)/* The IP supports HS400ES mode */
@@ -917,7 +917,8 @@ static inline void esdhc_pltfm_set_clock(struct sdhci_host *host, | ESDHC_CLOCK_MASK);sdhci_writel (host, temp,ESDHC_SYSTEM_CONTROL ); -if (imx_data->socdata->flags &ESDHC_FLAG_ERR010450 ) { +if ((imx_data->socdata->flags &ESDHC_FLAG_ERR010450 ) && + (!(host->quirks2 &SDHCI_QUIRK2_NO_1_8_V ))) {unsigned int max_clock; max_clock = imx_data->is_ddr ?45000000 :150000000 ;
drivers/mtd/nand/raw/brcmnand/brcmnand.c +67 -35
188 lines not on this page · raw message
drivers/mtd/nand/raw/brcmnand/brcmnand.h +29 -0
@@ -11,12 +11,25 @@struct platform_device ;struct dev_pm_ops ; +struct brcmnand_io_ops ; + +/* Special register offset constant to intercept a non-MMIO access +* to the flash cache register space. This is intentionally large +* not to overlap with an existing offset. +*/ +#define BRCMNAND_NON_MMIO_FC_ADDR 0xffffffffstruct brcmnand_soc {bool (*ctlrdy_ack)(struct brcmnand_soc *soc);void (*ctlrdy_set_enabled)(struct brcmnand_soc *soc,bool en);void (*prepare_data_bus)(struct brcmnand_soc *soc,bool prepare,bool is_param); +const struct brcmnand_io_ops *ops; +}; + +struct brcmnand_io_ops { +u32 (*read_reg)(struct brcmnand_soc *soc,u32 offset); +void (*write_reg)(struct brcmnand_soc *soc,u32 val,u32 offset); }; static inline void brcmnand_soc_data_bus_prepare(struct brcmnand_soc *soc,
@@ -58,6 +71,22 @@ static inline void brcmnand_writel(u32 val, void __iomem *addr)writel_relaxed (val, addr); } +static inline bool brcmnand_soc_has_ops (struct brcmnand_soc *soc) +{ +return soc && soc->ops && soc->ops->read_reg && soc->ops->write_reg; +} + +static inline u32 brcmnand_soc_read (struct brcmnand_soc *soc,u32 offset) +{ +return soc->ops->read_reg (soc, offset); +} + +static inline void brcmnand_soc_write (struct brcmnand_soc *soc,u32 val, +u32 offset) +{ + soc->ops->write_reg (soc, val, offset); +} +int brcmnand_probe (struct platform_device *pdev,struct brcmnand_soc *soc);int brcmnand_remove (struct platform_device *pdev);
drivers/net/ethernet/atheros/alx/ethtool.c +2 -3
@@ -292,9 +292,8 @@ static void alx_get_ethtool_stats(struct net_device *netdev,spin_lock (&alx->stats_lock);alx_update_hw_stats (hw); -BUILD_BUG_ON (sizeof (hw->stats) - offsetof(struct alx_hw_stats , rx_ok) < -ALX_NUM_STATS *sizeof (u64)); -memcpy (data, &hw->stats.rx_ok,ALX_NUM_STATS *sizeof (u64)); +BUILD_BUG_ON (sizeof (hw->stats) !=ALX_NUM_STATS *sizeof (u64)); +memcpy (data, &hw->stats,sizeof (hw->stats));spin_unlock (&alx->stats_lock); }
drivers/net/wireless/ath/ath9k/ahb.c +2 -2
@@ -136,8 +136,8 @@ static int ath_ahb_probe(struct platform_device *pdev) ah = sc->sc_ah;ath9k_hw_name (ah, hw_name,sizeof (hw_name)); -wiphy_info (hw->wiphy,"%s mem=0x%lx, irq=%d\n" , - hw_name, (unsigned long )mem, irq); +wiphy_info (hw->wiphy,"%s mem=0x%p, irq=%d\n" , + hw_name, mem, irq);return 0 ;
drivers/net/wireless/ath/ath9k/mac.h +4 -2
@@ -113,8 +113,10 @@ struct ath_tx_status {u8 qid;u16 desc_id;u8 tid; -u32 ba_low; -u32 ba_high; +struct_group (ba, + u32 ba_low; + u32 ba_high; + );u32 evm0;u32 evm1;u32 evm2;
drivers/net/wireless/ath/ath9k/pci.c +2 -2
@@ -988,8 +988,8 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) sc->sc_ah->msi_reg =0 ;ath9k_hw_name (sc->sc_ah, hw_name,sizeof (hw_name)); -wiphy_info (hw->wiphy,"%s mem=0x%lx, irq=%d\n" , - hw_name, (unsigned long )sc->mem, pdev->irq); +wiphy_info (hw->wiphy,"%s mem=0x%p, irq=%d\n" , + hw_name, sc->mem, pdev->irq);return 0 ;
drivers/net/wireless/ath/ath9k/xmit.c +2 -2
@@ -421,7 +421,7 @@ static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf, isaggr =bf_isaggr (bf);if (isaggr) { seq_st = ts->ts_seqnum; -memcpy (ba, &ts->ba_low,WME_BA_BMP_SIZE >>3 ); +memcpy (ba, &ts->ba,WME_BA_BMP_SIZE >>3 ); }while (bf) {
@@ -504,7 +504,7 @@ static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,if (isaggr && txok) {if (ts->ts_flags &ATH9K_TX_BA ) { seq_st = ts->ts_seqnum; -memcpy (ba, &ts->ba_low,WME_BA_BMP_SIZE >>3 ); +memcpy (ba, &ts->ba,WME_BA_BMP_SIZE >>3 ); }else {/* * AR5416 can become deaf/mute when BA
drivers/net/wireless/ath/wil6210/txrx.c +1 -1
@@ -666,7 +666,7 @@ static int wil_rx_crypto_check(struct wil6210_priv *wil, struct sk_buff *skb)struct wil_tid_crypto_rx *c = mc ? &s->group_crypto_rx : &s->tid_crypto_rx[tid];struct wil_tid_crypto_rx_single *cc = &c->key_id[key_id]; -const u8 *pn = (u8 *)&d->mac.pn_15_0; +const u8 *pn = (u8 *)&d->mac.pn;if (!cc->key_set) { wil_err_ratelimited(wil,
drivers/net/wireless/ath/wil6210/txrx.h +4 -2
@@ -343,8 +343,10 @@ struct vring_rx_mac {u32 d0;u32 d1;u16 w4; -u16 pn_15_0; -u32 pn_47_16; +struct_group_attr (pn, __packed, + u16 pn_15_0; + u32 pn_47_16; + ); } __packed;/* Rx descriptor - DMA part
drivers/net/wireless/ath/wil6210/txrx_edma.c +1 -1
@@ -548,7 +548,7 @@ static int wil_rx_crypto_check_edma(struct wil6210_priv *wil, s = &wil->sta[cid]; c = mc ? &s->group_crypto_rx : &s->tid_crypto_rx[tid]; cc = &c->key_id[key_id]; - pn = (u8 *)&st->ext.pn_15_0; + pn = (u8 *)&st->ext.pn;if (!cc->key_set) { wil_err_ratelimited(wil,
drivers/net/wireless/ath/wil6210/txrx_edma.h +4 -2
@@ -330,8 +330,10 @@ struct wil_rx_status_extension {u32 d0;u32 d1;__le16 seq_num;/* only lower 12 bits */ -u16 pn_15_0; -u32 pn_47_16; +struct_group_attr (pn, __packed, + u16 pn_15_0; + u32 pn_47_16; + ); } __packed;struct wil_rx_status_extended {
drivers/net/wireless/mac80211_hwsim.c +4 -3
@@ -3693,14 +3693,15 @@ static int hwsim_cloned_frame_received_nl(struct sk_buff *skb_2, frame_data_len =nla_len (info->attrs[HWSIM_ATTR_FRAME ]); frame_data = (void *)nla_data (info->attrs[HWSIM_ATTR_FRAME ]); +if (frame_data_len <sizeof (struct ieee80211_hdr_3addr ) || + frame_data_len >IEEE80211_MAX_DATA_LEN ) + goto err; +/* Allocate new skb here */ skb =alloc_skb (frame_data_len,GFP_KERNEL );if (skb ==NULL ) goto err; -if (frame_data_len >IEEE80211_MAX_DATA_LEN ) - goto err; -/* Copy the data */ skb_put_data (skb, frame_data, frame_data_len);
drivers/net/wireless/marvell/mwifiex/tdls.c +6 -3
@@ -735,6 +735,7 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,int ret;u16 capab;struct ieee80211_ht_cap *ht_cap; +unsigned int extra;u8 radio, *pos; capab = priv->curr_bss_params.bss_descriptor.cap_info_bitmap;
@@ -753,7 +754,10 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv,switch (action_code) {case WLAN_PUB_ACTION_TDLS_DISCOVER_RES : -skb_put (skb,sizeof (mgmt->u.action.u.tdls_discover_resp) +1 ); +/* See the layout of 'struct ieee80211_mgmt'. */ + extra =sizeof (mgmt->u.action.u.tdls_discover_resp) + +sizeof (mgmt->u.action.category); +skb_put (skb, extra); mgmt->u.action.category =WLAN_CATEGORY_PUBLIC ; mgmt->u.action.u.tdls_discover_resp.action_code =WLAN_PUB_ACTION_TDLS_DISCOVER_RES ;
@@ -762,8 +766,7 @@ mwifiex_construct_tdls_action_frame(struct mwifiex_private *priv, mgmt->u.action.u.tdls_discover_resp.capability =cpu_to_le16 (capab);/* move back for addr4 */ -memmove (pos +ETH_ALEN , &mgmt->u.action.category, -sizeof (mgmt->u.action.u.tdls_discover_resp)); +memmove (pos +ETH_ALEN , &mgmt->u.action, extra);/* init address 4 */ eth_broadcast_addr (pos);
drivers/pci/controller/dwc/pcie-fu740.c +1 -0
@@ -301,6 +301,7 @@ static int fu740_pcie_probe(struct platform_device *pdev) pci->dev = dev; pci->ops = &dw_pcie_ops; pci->pp.ops = &fu740_pcie_host_ops; + pci->pp.num_vectors =MAX_MSI_IRQS ;/* SiFive specific region: mgmt */ afp->mgmt_base =devm_platform_ioremap_resource_byname (pdev,"mgmt" );
drivers/perf/arm_smmuv3_pmu.c +45 -1
76 lines not on this page · raw message
drivers/perf/fsl_imx8_ddr_perf.c +21 -0
@@ -28,6 +28,8 @@#define CNTL_CLEAR_MASK 0xFFFFFFFD#define CNTL_OVER_MASK 0xFFFFFFFE +#define CNTL_CP_SHIFT 16 +#define CNTL_CP_MASK (0xFF << CNTL_CP_SHIFT)#define CNTL_CSV_SHIFT 24#define CNTL_CSV_MASK (0xFFU << CNTL_CSV_SHIFT)
@@ -35,6 +37,8 @@#define EVENT_CYCLES_COUNTER 0#define NUM_COUNTERS 4 +/* For removing bias if cycle counter CNTL.CP is set to 0xf0 */ +#define CYCLES_COUNTER_MASK 0x0FFFFFFF#define AXI_MASKING_REVERT 0xffff0000/* AXI_MASKING(MSB 16bits) + AXI_ID(LSB 16bits) */ #define to_ddr_pmu (p) container_of(p, struct ddr_pmu, pmu)
@@ -429,6 +433,17 @@ static void ddr_perf_counter_enable(struct ddr_pmu *pmu, int config,writel (0 , pmu->base + reg); val =CNTL_EN |CNTL_CLEAR ; val |=FIELD_PREP (CNTL_CSV_MASK , config); + +/* +* On i.MX8MP we need to bias the cycle counter to overflow more often. +* We do this by initializing bits [23:16] of the counter value via the +* COUNTER_CTRL Counter Parameter (CP) field. +*/ +if (pmu->devtype_data->quirks &DDR_CAP_AXI_ID_FILTER_ENHANCED ) { +if (counter ==EVENT_CYCLES_COUNTER ) + val |=FIELD_PREP (CNTL_CP_MASK ,0xf0 ); + } +writel (val, pmu->base + reg); }else {/* Disable counter */
@@ -468,6 +483,12 @@ static void ddr_perf_event_update(struct perf_event *event)int ret; new_raw_count =ddr_perf_read_counter (pmu, counter); +/* Remove the bias applied in ddr_perf_counter_enable(). */ +if (pmu->devtype_data->quirks &DDR_CAP_AXI_ID_FILTER_ENHANCED ) { +if (counter ==EVENT_CYCLES_COUNTER ) + new_raw_count &=CYCLES_COUNTER_MASK ; + } +local64_add (new_raw_count, &event->count);/*
drivers/scsi/lpfc/lpfc_debugfs.c +7 -7
@@ -6058,7 +6058,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport) phba->hba_debugfs_root, phba, &lpfc_debugfs_op_multixripools); -if (!phba->debug_multixri_pools) { +if (IS_ERR (phba->debug_multixri_pools)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"0527 Cannot create debugfs multixripools\n" ); goto debug_failed;
@@ -6070,7 +6070,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_cgn_buffer_op); -if (!phba->debug_cgn_buffer) { +if (IS_ERR (phba->debug_cgn_buffer)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6527 Cannot create debugfs " "cgn_buffer\n" );
@@ -6083,7 +6083,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_rx_monitor_op); -if (!phba->debug_rx_monitor) { +if (IS_ERR (phba->debug_rx_monitor)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6528 Cannot create debugfs " "rx_monitor\n" );
@@ -6096,7 +6096,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , phba->hba_debugfs_root, phba, &lpfc_debugfs_ras_log); -if (!phba->debug_ras_log) { +if (IS_ERR (phba->debug_ras_log)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"6148 Cannot create debugfs" " ras_log\n" );
@@ -6117,7 +6117,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,S_IFREG |0644 , phba->hba_debugfs_root, phba, &lpfc_debugfs_op_lockstat); -if (!phba->debug_lockstat) { +if (IS_ERR (phba->debug_lockstat)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"4610 Can't create debugfs lockstat\n" ); goto debug_failed;
@@ -6346,7 +6346,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , vport->vport_debugfs_root, vport, &lpfc_debugfs_op_scsistat); -if (!vport->debug_scsistat) { +if (IS_ERR (vport->debug_scsistat)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"4611 Cannot create debugfs scsistat\n" ); goto debug_failed;
@@ -6357,7 +6357,7 @@ lpfc_debugfs_initialize(struct lpfc_vport *vport)debugfs_create_file (name,0644 , vport->vport_debugfs_root, vport, &lpfc_debugfs_op_ioktime); -if (!vport->debug_ioktime) { +if (IS_ERR (vport->debug_ioktime)) {lpfc_printf_vlog (vport,KERN_ERR ,LOG_INIT ,"0815 Cannot create debugfs ioktime\n" ); goto debug_failed;
drivers/scsi/megaraid/megaraid_sas.h +1 -1
@@ -2330,7 +2330,7 @@ struct megasas_instance {u32 support_morethan256jbod;/* FW support for more than 256 PD/JBOD */ bool use_seqnum_jbod_fp;/* Added for PD sequence */ bool smp_affinity_enable; -spinlock_t crashdump_lock; +struct mutex crashdump_lock;struct megasas_register_set __iomem *reg_set;u32 __iomem *reply_post_host_index_addr[MR_MAX_MSIX_REG_ARRAY ];
drivers/scsi/megaraid/megaraid_sas_base.c +9 -12
@@ -3275,14 +3275,13 @@ fw_crash_buffer_store(struct device *cdev,struct megasas_instance *instance = (struct megasas_instance *) shost->hostdata;int val =0 ; -unsigned long flags;if (kstrtoint (buf,0 , &val) !=0 )return -EINVAL ; -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock); instance->fw_crash_buffer_offset = val; -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return strlen (buf); }
@@ -3297,24 +3296,23 @@ fw_crash_buffer_show(struct device *cdev,unsigned long dmachunk =CRASH_DMA_BUF_SIZE ;unsigned long chunk_left_bytes;unsigned long src_addr; -unsigned long flags;u32 buff_offset; -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock); buff_offset = instance->fw_crash_buffer_offset;if (!instance->crash_dump_buf || !((instance->fw_crash_state ==AVAILABLE ) || (instance->fw_crash_state ==COPYING ))) {dev_err (&instance->pdev->dev,"Firmware crash dump is not available\n" ); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return -EINVAL ; }if (buff_offset > (instance->fw_crash_buffer_size * dmachunk)) {dev_err (&instance->pdev->dev,"Firmware crash dump offset is out of range\n" ); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return 0 ; }
@@ -3326,7 +3324,7 @@ fw_crash_buffer_show(struct device *cdev, src_addr = (unsigned long )instance->crash_buf[buff_offset / dmachunk] + (buff_offset % dmachunk);memcpy (buf, (void *)src_addr, size); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);return size; }
@@ -3351,7 +3349,6 @@ fw_crash_state_store(struct device *cdev,struct megasas_instance *instance = (struct megasas_instance *) shost->hostdata;int val =0 ; -unsigned long flags;if (kstrtoint (buf,0 , &val) !=0 )return -EINVAL ;
@@ -3365,9 +3362,9 @@ fw_crash_state_store(struct device *cdev, instance->fw_crash_state = val;if ((val ==COPIED ) || (val ==COPY_ERROR )) { -spin_lock_irqsave (&instance->crashdump_lock, flags); +mutex_lock (&instance->crashdump_lock);megasas_free_host_crash_buffer (instance); -spin_unlock_irqrestore (&instance->crashdump_lock, flags); +mutex_unlock (&instance->crashdump_lock);if (val ==COPY_ERROR )dev_info (&instance->pdev->dev,"application failed to " "copy Firmware crash dump\n" );
@@ -7432,7 +7429,7 @@ static inline void megasas_init_ctrl_params(struct megasas_instance *instance)init_waitqueue_head (&instance->int_cmd_wait_q);init_waitqueue_head (&instance->abort_cmd_wait_q); -spin_lock_init (&instance->crashdump_lock); +mutex_init (&instance->crashdump_lock);spin_lock_init (&instance->mfi_pool_lock);spin_lock_init (&instance->hba_lock);spin_lock_init (&instance->stream_lock);
drivers/scsi/pm8001/pm8001_init.c +17 -34
84 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_dfs.c +3 -3
@@ -116,7 +116,7 @@ qla2x00_dfs_create_rport(scsi_qla_host_t *vha, struct fc_port *fp)sprintf (wwn,"pn-%016llx" ,wwn_to_u64 (fp->port_name)); fp->dfs_rport_dir =debugfs_create_dir (wwn, vha->dfs_rport_root); -if (!fp->dfs_rport_dir) +if (IS_ERR (fp->dfs_rport_dir))return ;if (NVME_TARGET (vha->hw, fp)) debugfs_create_file("dev_loss_tmo", 0600, fp->dfs_rport_dir,
@@ -615,14 +615,14 @@ qla2x00_dfs_setup(scsi_qla_host_t *vha)if (IS_QLA27XX (ha) ||IS_QLA83XX (ha) ||IS_QLA28XX (ha)) { ha->tgt.dfs_naqp =debugfs_create_file ("naqp" ,0400 , ha->dfs_dir, vha, &dfs_naqp_ops); -if (!ha->tgt.dfs_naqp) { +if (IS_ERR (ha->tgt.dfs_naqp)) {ql_log (ql_log_warn, vha,0xd011 ,"Unable to create debugFS naqp node.\n" ); goto out; } } vha->dfs_rport_root =debugfs_create_dir ("rports" , ha->dfs_dir); -if (!vha->dfs_rport_root) { +if (IS_ERR (vha->dfs_rport_root)) {ql_log (ql_log_warn, vha,0xd012 ,"Unable to create debugFS rports node.\n" ); goto out;
drivers/target/iscsi/iscsi_target_configfs.c +27 -27
129 lines not on this page · raw message
drivers/tty/serial/cpm_uart/cpm_uart_core.c +4 -9
@@ -1276,19 +1276,14 @@ static void cpm_uart_console_write(struct console *co, const char *s, {struct uart_cpm_port *pinfo = &cpm_uart_ports[co->index];unsigned long flags; -int nolock = oops_in_progress; -if (unlikely (nolock)) { +if (unlikely (oops_in_progress)) {local_irq_save (flags); - }else { -spin_lock_irqsave (&pinfo->port.lock, flags); - } - -cpm_uart_early_write (pinfo, s, count, true); - -if (unlikely (nolock)) { +cpm_uart_early_write (pinfo, s, count, true);local_irq_restore (flags); }else { +spin_lock_irqsave (&pinfo->port.lock, flags); +cpm_uart_early_write (pinfo, s, count, true);spin_unlock_irqrestore (&pinfo->port.lock, flags); } }
drivers/usb/cdns3/cdns3-plat.c +2 -1
@@ -256,9 +256,10 @@ static int cdns3_controller_resume(struct device *dev, pm_message_t msg)cdns3_set_platform_suspend (cdns->dev, false, false);spin_lock_irqsave (&cdns->lock, flags); -cdns_resume (cdns, !PMSG_IS_AUTO (msg)); +cdns_resume (cdns); cdns->in_lpm = false;spin_unlock_irqrestore (&cdns->lock, flags); +cdns_set_active (cdns, !PMSG_IS_AUTO (msg));if (cdns->wakeup_pending) { cdns->wakeup_pending = false;enable_irq (cdns->wakeup_irq);
drivers/usb/cdns3/cdnsp-pci.c +2 -1
@@ -210,8 +210,9 @@ static int __maybe_unused cdnsp_pci_resume(struct device *dev)int ret;spin_lock_irqsave (&cdns->lock, flags); - ret =cdns_resume (cdns,1 ); + ret =cdns_resume (cdns);spin_unlock_irqrestore (&cdns->lock, flags); +cdns_set_active (cdns,1 );return ret; }
drivers/usb/cdns3/core.c +11 -4
@@ -522,9 +522,8 @@ int cdns_suspend(struct cdns *cdns) }EXPORT_SYMBOL_GPL (cdns_suspend); -int cdns_resume (struct cdns *cdns,u8 set_active) +int cdns_resume (struct cdns *cdns) { -struct device *dev = cdns->dev;enum usb_role real_role;bool role_changed = false;int ret =0 ;
@@ -556,15 +555,23 @@ int cdns_resume(struct cdns *cdns, u8 set_active)if (cdns->roles[cdns->role]->resume) cdns->roles[cdns->role]->resume (cdns,cdns_power_is_lost (cdns)); + return 0; +} +EXPORT_SYMBOL_GPL (cdns_resume); + +void cdns_set_active (struct cdns *cdns,u8 set_active) +{ +struct device *dev = cdns->dev; +if (set_active) {pm_runtime_disable (dev);pm_runtime_set_active (dev);pm_runtime_enable (dev); } - return 0; +return ; } -EXPORT_SYMBOL_GPL (cdns_resume); +EXPORT_SYMBOL_GPL (cdns_set_active);#endif /* CONFIG_PM_SLEEP */ MODULE_AUTHOR ("Peter Chen <[email protected]>" );
drivers/usb/cdns3/core.h +5 -2
@@ -125,10 +125,13 @@ int cdns_init(struct cdns *cdns);int cdns_remove (struct cdns *cdns);#ifdef CONFIG_PM_SLEEP -int cdns_resume (struct cdns *cdns,u8 set_active); +int cdns_resume (struct cdns *cdns);int cdns_suspend (struct cdns *cdns); +void cdns_set_active (struct cdns *cdns,u8 set_active);#else /* CONFIG_PM_SLEEP */ -static inline int cdns_resume (struct cdns *cdns,u8 set_active) +static inline int cdns_resume (struct cdns *cdns) +{return 0 ; } +static inline int cdns_set_active (struct cdns *cdns,u8 set_active) {return 0 ; }static inline int cdns_suspend (struct cdns *cdns) {return 0 ; }
drivers/usb/gadget/udc/fsl_qe_udc.c +5 -1
@@ -1956,9 +1956,13 @@ static void ch9getstatus(struct qe_udc *udc, u8 request_type, u16 value, }else if ((request_type &USB_RECIP_MASK ) ==USB_RECIP_ENDPOINT ) {/* Get endpoint status */ int pipe = index &USB_ENDPOINT_NUMBER_MASK ; -struct qe_ep *target_ep = &udc->eps[pipe]; +struct qe_ep *target_ep;u16 usep; +if (pipe >=USB_MAX_ENDPOINTS ) + goto stall; + target_ep = &udc->eps[pipe]; +/* stall if endpoint doesn't exist */ if (!target_ep->ep.desc) goto stall;
drivers/usb/host/ehci-hcd.c +6 -2
@@ -755,10 +755,14 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)/* normal [4.15.1.2] or error [4.15.1.1] completion */ if (likely ((status & (STS_INT |STS_ERR )) !=0 )) { -if (likely ((status &STS_ERR ) ==0 )) +if (likely ((status &STS_ERR ) ==0 )) {INCR (ehci->stats.normal); -else + }else { +/* Force to check port status */ +if (ehci->has_ci_pec_bug) + status |=STS_PCD ;INCR (ehci->stats.error); + } bh =1 ; }
drivers/usb/host/ehci-hub.c +9 -1
@@ -674,7 +674,8 @@ ehci_hub_status_data (struct usb_hcd *hcd, char *buf)if ((temp & mask) !=0 ||test_bit (i, &ehci->port_c_suspend) || (ehci->reset_done[i] &&time_after_eq ( - jiffies, ehci->reset_done[i]))) { + jiffies, ehci->reset_done[i])) + ||ehci_has_ci_pec_bug (ehci, temp)) {if (i <7 ) buf [0 ] |=1 << (i +1 );else
@@ -874,6 +875,13 @@ int ehci_hub_control(if (temp &PORT_PEC ) status |=USB_PORT_STAT_C_ENABLE <<16 ; +if (ehci_has_ci_pec_bug (ehci, temp)) { + status |=USB_PORT_STAT_C_ENABLE <<16 ; +ehci_info (ehci, +"PE is cleared by HW port:%d PORTSC:%08x\n" , + wIndex +1 , temp); + } +if ((temp &PORT_OCC ) && (!ignore_oc && !ehci->spurious_oc)){ status |=USB_PORT_STAT_C_OVERCURRENT <<16 ;
drivers/usb/host/ehci.h +10 -0
@@ -207,6 +207,7 @@ struct ehci_hcd { /* one per controller */ unsigned has_fsl_port_bug:1; /* FreeScale */ unsigned has_fsl_hs_errata:1; /* Freescale HS quirk */ unsigned has_fsl_susp_errata:1; /* NXP SUSP quirk */ + unsigned has_ci_pec_bug:1; /* ChipIdea PEC bug */ unsigned big_endian_mmio:1; unsigned big_endian_desc:1; unsigned big_endian_capbase:1;
@@ -706,6 +707,15 @@ ehci_port_speed(struct ehci_hcd *ehci, unsigned int portsc)*/ #define ehci_has_fsl_susp_errata (e) ((e)->has_fsl_susp_errata) +/* +* Some Freescale/NXP processors using ChipIdea IP have a bug in which +* disabling the port (PE is cleared) does not cause PEC to be asserted +* when frame babble is detected. +*/ +#define ehci_has_ci_pec_bug (e, portsc) \ + ((e)->has_ci_pec_bug && ((e)->command & CMD_PSE) \ + && !(portsc & PORT_PEC) && !(portsc & PORT_PE)) +/* * While most USB host controllers implement their registers in * little-endian format, a minority (celleb companion chip) implement
fs/attr.c +18 -2
@@ -402,9 +402,25 @@ int notify_change(struct user_namespace *mnt_userns, struct dentry *dentry,return error;if ((ia_valid &ATTR_MODE )) { -umode_t amode = attr->ia_mode; +/* +* Don't allow changing the mode of symlinks: +* +* (1) The vfs doesn't take the mode of symlinks into account +* during permission checking. +* (2) This has never worked correctly. Most major filesystems +* did return EOPNOTSUPP due to interactions with POSIX ACLs +* but did still updated the mode of the symlink. +* This inconsistency led system call wrapper providers such +* as libc to block changing the mode of symlinks with +* EOPNOTSUPP already. +* (3) To even do this in the first place one would have to use +* specific file descriptors and quite some effort. +*/ +if (S_ISLNK (inode->i_mode)) +return -EOPNOTSUPP ; +/* Flag setting protected by i_mutex */ -if (is_sxid (amode)) +if (is_sxid (attr->ia_mode)) inode->i_flags &= ~S_NOSEC ; }
fs/autofs/waitq.c +2 -1
@@ -32,8 +32,9 @@ void autofs_catatonic_mode(struct autofs_sb_info *sbi) wq->status = -ENOENT ;/* Magic is gone - report failure */ kfree (wq->name.name - wq->offset); wq->name.name =NULL ; - wq->wait_ctr--;wake_up_interruptible (&wq->queue); +if (!--wq->wait_ctr) +kfree (wq); wq = nwq; }fput (sbi->pipe);/* Close the pipe */
fs/btrfs/ctree.h +0 -2
@@ -536,8 +536,6 @@ struct btrfs_swapfile_pin {int bg_extent_count; }; -bool btrfs_pinned_by_swapfile (struct btrfs_fs_info *fs_info,void *ptr); -enum {BTRFS_FS_BARRIER ,BTRFS_FS_CLOSING_START ,
fs/btrfs/delayed-inode.c +16 -3
@@ -1083,20 +1083,33 @@ static int __btrfs_run_delayed_items(struct btrfs_trans_handle *trans, int nr) ret =__btrfs_commit_inode_delayed_items (trans, path, curr_node);if (ret) { -btrfs_release_delayed_node (curr_node); - curr_node =NULL ;btrfs_abort_transaction (trans, ret);break ; } prev_node = curr_node; curr_node =btrfs_next_delayed_node (curr_node); +/* +* See the comment below about releasing path before releasing +* node. If the commit of delayed items was successful the path +* should always be released, but in case of an error, it may +* point to locked extent buffers (a leaf at the very least). +*/ +ASSERT (path->nodes[0 ] ==NULL );btrfs_release_delayed_node (prev_node); } +/* +* Release the path to avoid a potential deadlock and lockdep splat when +* releasing the delayed node, as that requires taking the delayed node's +* mutex. If another task starts running delayed items before we take +* the mutex, it will first lock the mutex and then it may try to lock +* the same btree path (leaf). +*/ +btrfs_free_path (path); +if (curr_node)btrfs_release_delayed_node (curr_node); -btrfs_free_path (path); trans->block_rsv = block_rsv;return ret;
fs/btrfs/disk-io.c +3 -5
@@ -2605,13 +2605,11 @@ int btrfs_validate_super(struct btrfs_fs_info *fs_info, ret = -EINVAL ; } -if (btrfs_fs_incompat (fs_info,METADATA_UUID ) && -memcmp (fs_info->fs_devices->metadata_uuid, - fs_info->super_copy->metadata_uuid,BTRFS_FSID_SIZE )) { +if (memcmp (fs_info->fs_devices->metadata_uuid,btrfs_sb_fsid_ptr (sb), +BTRFS_FSID_SIZE ) !=0 ) {btrfs_err (fs_info,"superblock metadata_uuid doesn't match metadata uuid of fs_devices: %pU != %pU" , - fs_info->super_copy->metadata_uuid, - fs_info->fs_devices->metadata_uuid); +btrfs_sb_fsid_ptr (sb), fs_info->fs_devices->metadata_uuid); ret = -EINVAL ; }
fs/btrfs/extent-tree.c +5 -0
@@ -860,6 +860,11 @@ int lookup_inline_extent_backref(struct btrfs_trans_handle *trans, err = -ENOENT ; goto out; }else if (WARN_ON (ret)) { +btrfs_print_leaf (path->nodes[0 ]); +btrfs_err (fs_info, +"extent item not found for insert, bytenr %llu num_bytes %llu parent %llu root_objectid %llu owner %llu offset %llu" , + bytenr, num_bytes, parent, root_objectid, owner, + offset); err = -EIO ; goto out; }
fs/btrfs/ioctl.c +7 -1
@@ -2526,6 +2526,13 @@ static int btrfs_search_path_in_tree_user(struct user_namespace *mnt_userns, goto out_put; } +/* +* We don't need the path anymore, so release it and +* avoid deadlocks and lockdep warnings in case +* btrfs_iget() needs to lookup the inode from its root +* btree and lock the same leaf. +*/ +btrfs_release_path (path); temp_inode =btrfs_iget (sb, key2.objectid, root);if (IS_ERR (temp_inode)) { ret =PTR_ERR (temp_inode);
@@ -2546,7 +2553,6 @@ static int btrfs_search_path_in_tree_user(struct user_namespace *mnt_userns, goto out_put; } -btrfs_release_path (path); key.objectid = key.offset; key.offset = (u64)-1 ; dirid = key.objectid;
fs/btrfs/volumes.c +8 -0
@@ -709,6 +709,14 @@ static int btrfs_open_one_device(struct btrfs_fs_devices *fs_devices,return -EINVAL ; } +u8 *btrfs_sb_fsid_ptr (struct btrfs_super_block *sb) +{ +bool has_metadata_uuid = (btrfs_super_incompat_flags (sb) & +BTRFS_FEATURE_INCOMPAT_METADATA_UUID ); + +return has_metadata_uuid ? sb->metadata_uuid : sb->fsid; +} +/* * Handle scanned device having its CHANGING_FSID_V2 flag set and the fs_devices * being created with a disk that has already completed its fsid change. Such
fs/btrfs/volumes.h +3 -0
@@ -622,4 +622,7 @@ const char *btrfs_bg_type_to_raid_name(u64 flags);int btrfs_verify_dev_extents (struct btrfs_fs_info *fs_info);int btrfs_repair_one_zone (struct btrfs_fs_info *fs_info,u64 logical); +bool btrfs_pinned_by_swapfile (struct btrfs_fs_info *fs_info,void *ptr); +u8 *btrfs_sb_fsid_ptr (struct btrfs_super_block *sb); +#endif
fs/ext2/xattr.c +2 -2
@@ -694,10 +694,10 @@ ext2_xattr_set2(struct inode *inode, struct buffer_head *old_bh,/* We need to allocate a new block */ ext2_fsblk_t goal =ext2_group_first_block_no (sb,EXT2_I (inode)->i_block_group); -int block =ext2_new_block (inode, goal, &error); +ext2_fsblk_t block =ext2_new_block (inode, goal, &error);if (error) goto cleanup; -ea_idebug (inode,"creating block %d" , block); +ea_idebug (inode,"creating block %lu" , block); new_bh =sb_getblk (sb, block);if (unlikely (!new_bh)) {
fs/ext4/namei.c +15 -11
@@ -343,17 +343,17 @@ static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode, struct buffer_head *bh) {struct ext4_dir_entry_tail *t; +int blocksize =EXT4_BLOCK_SIZE (inode->i_sb);#ifdef PARANOID struct ext4_dir_entry *d, *top; d = (struct ext4_dir_entry *)bh->b_data; top = (struct ext4_dir_entry *)(bh->b_data + - (EXT4_BLOCK_SIZE (inode->i_sb) - -sizeof (struct ext4_dir_entry_tail ))); -while (d < top && d->rec_len) + (blocksize -sizeof (struct ext4_dir_entry_tail ))); +while (d < top &&ext4_rec_len_from_disk (d->rec_len, blocksize)) d = (struct ext4_dir_entry *)(((void *)d) + -le16_to_cpu (d->rec_len)); +ext4_rec_len_from_disk (d->rec_len, blocksize));if (d != top)return NULL ;
@@ -364,7 +364,8 @@ static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode,#endif if (t->det_reserved_zero1 || -le16_to_cpu (t->det_rec_len) !=sizeof (struct ext4_dir_entry_tail ) || + (ext4_rec_len_from_disk (t->det_rec_len, blocksize) != +sizeof (struct ext4_dir_entry_tail )) || t->det_reserved_zero2 || t->det_reserved_ft !=EXT4_FT_DIR_CSUM )return NULL ;
@@ -445,13 +446,14 @@ static struct dx_countlimit *get_dx_countlimit(struct inode *inode,struct ext4_dir_entry *dp;struct dx_root_info *root;int count_offset; +int blocksize =EXT4_BLOCK_SIZE (inode->i_sb); +unsigned int rlen =ext4_rec_len_from_disk (dirent->rec_len, blocksize); -if (le16_to_cpu (dirent->rec_len) ==EXT4_BLOCK_SIZE (inode->i_sb)) +if (rlen == blocksize) count_offset =8 ; -else if (le16_to_cpu (dirent->rec_len) ==12 ) { +else if (rlen ==12 ) { dp = (struct ext4_dir_entry *)(((void *)dirent) +12 ); -if (le16_to_cpu (dp->rec_len) != -EXT4_BLOCK_SIZE (inode->i_sb) -12 ) +if (ext4_rec_len_from_disk (dp->rec_len, blocksize) != blocksize -12 )return NULL ; root = (struct dx_root_info *)(((void *)dp +12 )); if (root->reserved_zero ||
@@ -1315,6 +1317,7 @@ static int dx_make_map(struct inode *dir, struct buffer_head *bh,unsigned int buflen = bh->b_size;char *base = bh->b_data;struct dx_hash_info h = *hinfo; +int blocksize =EXT4_BLOCK_SIZE (dir->i_sb);if (ext4_has_metadata_csum (dir->i_sb)) buflen -=sizeof (struct ext4_dir_entry_tail );
@@ -1335,11 +1338,12 @@ static int dx_make_map(struct inode *dir, struct buffer_head *bh, map_tail--; map_tail->hash = h.hash; map_tail->offs = ((char *) de - base)>>2 ; - map_tail->size =le16_to_cpu (de->rec_len); + map_tail->size =ext4_rec_len_from_disk (de->rec_len, + blocksize); count++;cond_resched (); } - de =ext4_next_entry (de, dir->i_sb->s_blocksize); + de =ext4_next_entry (de, blocksize); }return count; }
fs/jbd2/checkpoint.c +3 -3
@@ -165,7 +165,7 @@ int jbd2_log_do_checkpoint(journal_t *journal)tid_t this_tid;int result, batch_count =0 ; -jbd_debug (1 ,"Start checkpoint\n" ); +jbd2_debug (1 ,"Start checkpoint\n" );/* * First thing: if there are any transactions in the log which
@@ -174,7 +174,7 @@ int jbd2_log_do_checkpoint(journal_t *journal)*/ result =jbd2_cleanup_journal_tail (journal);trace_jbd2_checkpoint (journal, result); -jbd_debug (1 ,"cleanup_journal_tail returned %d\n" , result); +jbd2_debug (1 ,"cleanup_journal_tail returned %d\n" , result);if (result <=0 )return result;
@@ -725,5 +725,5 @@ void __jbd2_journal_drop_transaction(journal_t *journal, transaction_t *transacttrace_jbd2_drop_transaction (journal, transaction); -jbd_debug (1 ,"Dropping transaction %d, all done\n" , transaction->t_tid); +jbd2_debug (1 ,"Dropping transaction %d, all done\n" , transaction->t_tid); }
fs/jbd2/commit.c +18 -31
152 lines not on this page · raw message
fs/jbd2/journal.c +17 -17
@@ -203,11 +203,11 @@ static int kjournald2(void *arg)if (journal->j_flags &JBD2_UNMOUNT ) goto end_loop; -jbd_debug (1 ,"commit_sequence=%u, commit_request=%u\n" , +jbd2_debug (1 ,"commit_sequence=%u, commit_request=%u\n" , journal->j_commit_sequence, journal->j_commit_request);if (journal->j_commit_sequence != journal->j_commit_request) { -jbd_debug (1 ,"OK, requests differ\n" ); +jbd2_debug (1 ,"OK, requests differ\n" );write_unlock (&journal->j_state_lock);del_timer_sync (&journal->j_commit_timer);jbd2_journal_commit_transaction (journal);
@@ -222,7 +222,7 @@ static int kjournald2(void *arg)* good idea, because that depends on threads that may * be already stopped. */ -jbd_debug (1 ,"Now suspending kjournald2\n" ); +jbd2_debug (1 ,"Now suspending kjournald2\n" );write_unlock (&journal->j_state_lock);try_to_freeze ();write_lock (&journal->j_state_lock);
@@ -252,7 +252,7 @@ static int kjournald2(void *arg)finish_wait (&journal->j_wait_commit, &wait); } -jbd_debug (1 ,"kjournald2 wakes\n" ); +jbd2_debug (1 ,"kjournald2 wakes\n" );/* * Were we woken up by a commit wakeup event?
@@ -260,7 +260,7 @@ static int kjournald2(void *arg) transaction = journal->j_running_transaction;if (transaction &&time_after_eq (jiffies, transaction->t_expires)) { journal->j_commit_request = transaction->t_tid; -jbd_debug (1 ,"woke because of timeout\n" ); +jbd2_debug (1 ,"woke because of timeout\n" ); } goto loop;
@@ -268,7 +268,7 @@ static int kjournald2(void *arg)del_timer_sync (&journal->j_commit_timer); journal->j_task =NULL ;wake_up (&journal->j_wait_done_commit); -jbd_debug (1 ,"Journal thread exiting.\n" ); +jbd2_debug (1 ,"Journal thread exiting.\n" );write_unlock (&journal->j_state_lock);return 0 ; }
@@ -500,7 +500,7 @@ int __jbd2_log_start_commit(journal_t *journal, tid_t target)*/ journal->j_commit_request = target; -jbd_debug (1 ,"JBD2: requesting commit %u/%u\n" , +jbd2_debug (1 ,"JBD2: requesting commit %u/%u\n" , journal->j_commit_request, journal->j_commit_sequence); journal->j_running_transaction->t_requested = jiffies;
@@ -705,7 +705,7 @@ int jbd2_log_wait_commit(journal_t *journal, tid_t tid) }#endif while (tid_gt (tid, journal->j_commit_sequence)) { -jbd_debug (1 ,"JBD2: want %u, j_commit_sequence=%u\n" , +jbd2_debug (1 ,"JBD2: want %u, j_commit_sequence=%u\n" , tid, journal->j_commit_sequence);read_unlock (&journal->j_state_lock);wake_up (&journal->j_wait_commit);
@@ -1123,7 +1123,7 @@ int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block) freed += journal->j_last - journal->j_first;trace_jbd2_update_log_tail (journal, tid, block, freed); -jbd_debug (1 , +jbd2_debug (1 ,"Cleaning journal tail from %u to %u (offset %lu), " "freeing %lu\n" , journal->j_tail_sequence, tid, block, freed);
@@ -1498,7 +1498,7 @@ journal_t *jbd2_journal_init_inode(struct inode *inode)return NULL ; } -jbd_debug (1 ,"JBD2: inode %s/%ld, size %lld, bits %d, blksize %ld\n" , +jbd2_debug (1 ,"JBD2: inode %s/%ld, size %lld, bits %d, blksize %ld\n" , inode->i_sb->s_id, inode->i_ino, (long long ) inode->i_size, inode->i_sb->s_blocksize_bits, inode->i_sb->s_blocksize);
@@ -1577,7 +1577,7 @@ static int journal_reset(journal_t *journal)* attempting a write to a potential-readonly device. */ if (sb->s_start ==0 ) { -jbd_debug (1 ,"JBD2: Skipping superblock update on recovered sb " +jbd2_debug (1 ,"JBD2: Skipping superblock update on recovered sb " "(start %ld, seq %u, errno %d)\n" , journal->j_tail, journal->j_tail_sequence, journal->j_errno);
@@ -1680,7 +1680,7 @@ int jbd2_journal_update_sb_log_tail(journal_t *journal, tid_t tail_tid, }BUG_ON (!mutex_is_locked (&journal->j_checkpoint_mutex)); -jbd_debug (1 ,"JBD2: updating superblock (start %lu, seq %u)\n" , +jbd2_debug (1 ,"JBD2: updating superblock (start %lu, seq %u)\n" , tail_block, tail_tid);lock_buffer (journal->j_sb_buffer);
@@ -1721,7 +1721,7 @@ static void jbd2_mark_journal_empty(journal_t *journal, int write_op)return ; } -jbd_debug (1 ,"JBD2: Marking journal as empty (seq %u)\n" , +jbd2_debug (1 ,"JBD2: Marking journal as empty (seq %u)\n" , journal->j_tail_sequence); sb->s_sequence =cpu_to_be32 (journal->j_tail_sequence);
@@ -1867,7 +1867,7 @@ void jbd2_journal_update_sb_errno(journal_t *journal) errcode = journal->j_errno;if (errcode == -ESHUTDOWN ) errcode =0 ; -jbd_debug (1 ,"JBD2: updating superblock error (errno %d)\n" , errcode); +jbd2_debug (1 ,"JBD2: updating superblock error (errno %d)\n" , errcode); sb->s_errno =cpu_to_be32 (errcode);jbd2_write_superblock (journal,REQ_SYNC |REQ_FUA );
@@ -2339,7 +2339,7 @@ int jbd2_journal_set_features(journal_t *journal, unsigned long compat, compat & JBD2_FEATURE_COMPAT_CHECKSUM) compat &= ~JBD2_FEATURE_COMPAT_CHECKSUM ; -jbd_debug (1 ,"Setting new features 0x%lx/0x%lx/0x%lx\n" , +jbd2_debug (1 ,"Setting new features 0x%lx/0x%lx/0x%lx\n" , compat, ro, incompat); sb = journal->j_superblock;
@@ -2408,7 +2408,7 @@ void jbd2_journal_clear_features(journal_t *journal, unsigned long compat, {journal_superblock_t *sb; -jbd_debug (1 ,"Clear features 0x%lx/0x%lx/0x%lx\n" , +jbd2_debug (1 ,"Clear features 0x%lx/0x%lx/0x%lx\n" , compat, ro, incompat); sb = journal->j_superblock;
@@ -2865,7 +2865,7 @@ static struct journal_head *journal_alloc_journal_head(void)#endif ret =kmem_cache_zalloc (jbd2_journal_head_cache,GFP_NOFS );if (!ret) { -jbd_debug (1 ,"out of memory for journal_head\n" ); +jbd2_debug (1 ,"out of memory for journal_head\n" );pr_notice_ratelimited ("ENOMEM in %s, retrying.\n" , __func__); ret =kmem_cache_zalloc (jbd2_journal_head_cache,GFP_NOFS | __GFP_NOFAIL);
fs/jbd2/recovery.c +18 -24
130 lines not on this page · raw message
fs/jbd2/revoke.c +4 -4
@@ -398,7 +398,7 @@ int jbd2_journal_revoke(handle_t *handle, unsigned long long blocknr, } handle->h_revoke_credits--; -jbd_debug (2 ,"insert revoke for block %llu, bh_in=%p\n" ,blocknr, bh_in); +jbd2_debug (2 ,"insert revoke for block %llu, bh_in=%p\n" ,blocknr, bh_in); err =insert_revoke_hash (journal, blocknr, handle->h_transaction->t_tid);BUFFER_TRACE (bh_in,"exit" );
@@ -428,7 +428,7 @@ int jbd2_journal_cancel_revoke(handle_t *handle, struct journal_head *jh)int did_revoke =0 ;/* akpm: debug */ struct buffer_head *bh =jh2bh (jh); -jbd_debug (4 ,"journal_head %p, cancelling revoke\n" , jh); +jbd2_debug (4 ,"journal_head %p, cancelling revoke\n" , jh);/* Is the existing Revoke bit valid? If so, we trust it, and * only perform the full cancel if the revoke bit is set. If
@@ -444,7 +444,7 @@ int jbd2_journal_cancel_revoke(handle_t *handle, struct journal_head *jh)if (need_cancel) { record =find_revoke_record (journal, bh->b_blocknr);if (record) { -jbd_debug (4 ,"cancelled existing revoke on " +jbd2_debug (4 ,"cancelled existing revoke on " "blocknr %llu\n" , (unsigned long long )bh->b_blocknr);spin_lock (&journal->j_revoke_lock);list_del (&record->hash);
@@ -560,7 +560,7 @@ void jbd2_journal_write_revoke_records(transaction_t *transaction, }if (descriptor)flush_descriptor (journal, descriptor, offset); -jbd_debug (1 ,"Wrote %d revoke records\n" , count); +jbd2_debug (1 ,"Wrote %d revoke records\n" , count); }/*
fs/jbd2/transaction.c +62 -52
242 lines not on this page · raw message
fs/jfs/jfs_dmap.c +1 -0
@@ -269,6 +269,7 @@ int dbUnmount(struct inode *ipbmap, int mounterror)/* free the memory for the in-memory bmap. */ kfree (bmp); +JFS_SBI (ipbmap->i_sb)->bmap =NULL ;return (0 ); }
fs/jfs/jfs_imap.c +1 -0
@@ -193,6 +193,7 @@ int diUnmount(struct inode *ipimap, int mounterror)* free in-memory control structure */ kfree (imap); +JFS_IP (ipimap)->i_imap =NULL ;return (0 ); }
fs/locks.c +1 -1
@@ -1339,6 +1339,7 @@ static int posix_lock_inode(struct inode *inode, struct file_lock *request, out:spin_unlock (&ctx->flc_lock);percpu_up_read (&file_rwsem); +trace_posix_lock_inode (inode, request, error);/* * Free any unused locks. */
@@ -1347,7 +1348,6 @@ static int posix_lock_inode(struct inode *inode, struct file_lock *request,if (new_fl2)locks_free_lock (new_fl2);locks_dispose_list (&dispose); -trace_posix_lock_inode (inode, request, error);return error; }
fs/nfsd/nfs4proc.c +2 -2
@@ -895,8 +895,8 @@ nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, rename->rn_tname, rename->rn_tnamelen);if (status)return status; -set_change_info (&rename->rn_sinfo, &cstate->current_fh); -set_change_info (&rename->rn_tinfo, &cstate->save_fh); +set_change_info (&rename->rn_sinfo, &cstate->save_fh); +set_change_info (&rename->rn_tinfo, &cstate->current_fh);return nfs_ok; }
fs/overlayfs/copy_up.c +2 -1
@@ -583,7 +583,8 @@ static int ovl_copy_up_inode(struct ovl_copy_up_ctx *c, struct dentry *temp)if (err)return err; -if (inode->i_flags &OVL_COPY_I_FLAGS_MASK ) { +if (inode->i_flags &OVL_COPY_I_FLAGS_MASK && + (S_ISREG (c->stat.mode) ||S_ISDIR (c->stat.mode))) {/* * Copy the fileattr inode flags that are the source of already * copied i_flags
fs/overlayfs/file.c +3 -6
@@ -19,7 +19,6 @@ struct ovl_aio_req {struct kiocb iocb;refcount_t ref;struct kiocb *orig_iocb; -struct fd fd; };static struct kmem_cache *ovl_aio_request_cachep;
@@ -256,7 +255,7 @@ static rwf_t ovl_iocb_to_rwf(int ifl)static inline void ovl_aio_put (struct ovl_aio_req *aio_req) {if (refcount_dec_and_test (&aio_req->ref)) { -fdput (aio_req->fd); +fput (aio_req->iocb.ki_filp);kmem_cache_free (ovl_aio_request_cachep, aio_req); } }
@@ -322,10 +321,9 @@ static ssize_t ovl_read_iter(struct kiocb *iocb, struct iov_iter *iter)if (!aio_req) goto out; - aio_req->fd = real; real.flags =0 ; aio_req->orig_iocb = iocb; -kiocb_clone (&aio_req->iocb, iocb, real.file); +kiocb_clone (&aio_req->iocb, iocb,get_file (real.file)); aio_req->iocb.ki_complete = ovl_aio_rw_complete;refcount_set (&aio_req->ref,2 ); ret =vfs_iocb_iter_read (real.file, &aio_req->iocb, iter);
@@ -394,10 +392,9 @@ static ssize_t ovl_write_iter(struct kiocb *iocb, struct iov_iter *iter)/* Pacify lockdep, same trick as done in aio_write() */ __sb_writers_release (file_inode (real.file)->i_sb,SB_FREEZE_WRITE ); - aio_req->fd = real; real.flags =0 ; aio_req->orig_iocb = iocb; -kiocb_clone (&aio_req->iocb, iocb, real.file); +kiocb_clone (&aio_req->iocb, iocb,get_file (real.file)); aio_req->iocb.ki_flags = ifl; aio_req->iocb.ki_complete = ovl_aio_rw_complete;refcount_set (&aio_req->ref,2 );
fs/tracefs/inode.c +3 -0
@@ -556,6 +556,9 @@ static struct dentry *__create_dir(const char *name, struct dentry *parent,*/ struct dentry *tracefs_create_dir (const char *name,struct dentry *parent) { +if (security_locked_down (LOCKDOWN_TRACEFS )) +return NULL ; +return __create_dir (name, parent, &simple_dir_inode_operations); }
include/linux/acpi_iort.h +1 -0
@@ -21,6 +21,7 @@*/ #define IORT_SMMU_V3_PMCG_GENERIC 0x00000000/* Generic SMMUv3 PMCG */ #define IORT_SMMU_V3_PMCG_HISI_HIP08 0x00000001/* HiSilicon HIP08 PMCG */ +#define IORT_SMMU_V3_PMCG_HISI_HIP09 0x00000002/* HiSilicon HIP09 PMCG */ int iort_register_domain_token (int trans_id,phys_addr_t base,struct fwnode_handle *fw_node);
include/linux/jbd2.h +5 -6
@@ -58,10 +58,10 @@ extern ushort jbd2_journal_enable_debug;void __jbd2_debug (int level,const char *file,const char *func,unsigned int line,const char *fmt, ...); -#define jbd_debug(n, fmt, a...) \ +#define jbd2_debug(n, fmt, a...) \ __jbd2_debug((n), __FILE__, __func__, __LINE__, (fmt), ##a)#else -#define jbd_debug(n, fmt, a...) no_printk(fmt, ##a) +#define jbd2_debug(n, fmt, a...) no_printk(fmt, ##a)#endif extern void *jbd2_alloc (size_t size,gfp_t flags);
@@ -554,9 +554,6 @@ struct transaction_chp_stats_s {* ->j_list_lock * * j_state_lock -* ->t_handle_lock -* -* j_state_lock * ->j_list_lock (journal_unmap_buffer) * */
@@ -594,7 +591,7 @@ struct transaction_s*/ unsigned long t_log_start; -/* +/* * Number of buffers on the t_buffers list [j_list_lock, no locks * needed for jbd2 thread] */
@@ -1538,6 +1535,8 @@ extern int jbd2_journal_flush(journal_t *journal, unsigned int flags);extern void jbd2_journal_lock_updates (journal_t *);extern void jbd2_journal_unlock_updates (journal_t *); +void jbd2_journal_wait_updates (journal_t *); +extern journal_t *jbd2_journal_init_dev (struct block_device *bdev,struct block_device *fs_dev,unsigned long long start,int len,int bsize);
include/linux/libata.h +4 -0
@@ -264,6 +264,10 @@ enum {ATA_HOST_PARALLEL_SCAN = (1 <<2 ),/* Ports on this host can be scanned in parallel */ ATA_HOST_IGNORE_ATA = (1 <<3 ),/* Ignore ATA devices on this host. */ +ATA_HOST_NO_PART = (1 <<4 ),/* Host does not support partial */ +ATA_HOST_NO_SSC = (1 <<5 ),/* Host does not support slumber */ +ATA_HOST_NO_DEVSLP = (1 <<6 ),/* Host does not support devslp */ +/* bits 24:31 of host->flags are reserved for LLD specific flags */ /* various lengths of time */
include/linux/perf_event.h +19 -3
@@ -1084,15 +1084,31 @@ extern int perf_event_output(struct perf_event *event, struct pt_regs *regs);static inline bool -is_default_overflow_handler (struct perf_event *event) +__is_default_overflow_handler (perf_overflow_handler_t overflow_handler) { -if (likely (event->overflow_handler == perf_event_output_forward)) +if (likely (overflow_handler == perf_event_output_forward))return true; -if (unlikely (event->overflow_handler == perf_event_output_backward)) +if (unlikely (overflow_handler == perf_event_output_backward))return true;return false; } +#define is_default_overflow_handler (event) \ + __is_default_overflow_handler((event)->overflow_handler) + +#ifdef CONFIG_BPF_SYSCALL +static inline bool uses_default_overflow_handler (struct perf_event *event) +{ +if (likely (is_default_overflow_handler (event))) +return true; + +return __is_default_overflow_handler (event->orig_overflow_handler); +} +#else +#define uses_default_overflow_handler (event) \ + is_default_overflow_handler(event) +#endif + extern void perf_event_header__init_id(struct perf_event_header *header, struct perf_sample_data *data,
include/linux/sched/task.h +27 -1
@@ -108,10 +108,36 @@ static inline struct task_struct *get_task_struct(struct task_struct *t) }extern void __put_task_struct (struct task_struct *t); +extern void __put_task_struct_rcu_cb (struct rcu_head *rhp);static inline void put_task_struct (struct task_struct *t) { -if (refcount_dec_and_test (&t->usage)) +if (!refcount_dec_and_test (&t->usage)) +return ; + +/* +* under PREEMPT_RT, we can't call put_task_struct +* in atomic context because it will indirectly +* acquire sleeping locks. +* +* call_rcu() will schedule delayed_put_task_struct_rcu() +* to be called in process context. +* +* __put_task_struct() is called when +* refcount_dec_and_test(&t->usage) succeeds. +* +* This means that it can't "conflict" with +* put_task_struct_rcu_user() which abuses ->rcu the same +* way; rcu_users has a reference so task->usage can't be +* zero after rcu_users 1 -> 0 transition. +* +* delayed_free_task() also uses ->rcu, but it is only called +* when it fails to fork a process. Therefore, there is no +* way it can conflict with put_task_struct(). +*/ +if (IS_ENABLED (CONFIG_PREEMPT_RT ) && !preemptible ()) +call_rcu (&t->rcu, __put_task_struct_rcu_cb); +else __put_task_struct (t); }
include/uapi/linux/netfilter_bridge/ebtables.h +8 -6
@@ -182,12 +182,14 @@ struct ebt_entry {unsigned char sourcemsk[ETH_ALEN ];unsigned char destmac[ETH_ALEN ];unsigned char destmsk[ETH_ALEN ]; -/* sizeof ebt_entry + matches */ -unsigned int watchers_offset; -/* sizeof ebt_entry + matches + watchers */ -unsigned int target_offset; -/* sizeof ebt_entry + matches + watchers + target */
Lines of this file are not shown. View the raw message.
kernel/trace/trace.c +34 -7
41 lines not on this page · raw message
net/sched/cls_rsvp.h deleted +0 -776
776 lines not on this page · raw message
samples/hw_breakpoint/data_breakpoint.c +3 -1
Lines of this file are not shown. View the raw message.
tools/perf/tests/shell/stat_bpf_counters.sh +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/ftracetest +8 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.