Linux 5.10.152
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.152 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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 | 4 Makefile | 6 - arch/arm64/Kconfig | 16 +++ arch/arm64/boot/dts/qcom/sc7180-trogdor-lte-sku.dtsi | 4 arch/arm64/boot/dts/qcom/sc7180-trogdor.dtsi | 2 arch/arm64/include/asm/cpucaps.h | 3 arch/arm64/kernel/cpu_errata.c | 16 +++ arch/arm64/kernel/cpufeature.c | 13 ++ arch/arm64/kernel/topology.c | 40 -------- arch/arm64/kvm/vgic/vgic-its.c | 5 - arch/riscv/Kconfig | 2 arch/riscv/kernel/setup.c | 13 ++ arch/riscv/kernel/smpboot.c | 4 arch/x86/Kconfig | 1 arch/x86/events/intel/pt.c | 63 ++++++++++-- arch/x86/include/asm/iommu.h | 4 arch/x86/kernel/cpu/microcode/amd.c | 16 ++- block/blk-wbt.c | 11 -- drivers/acpi/acpi_extlog.c | 33 ++++-- drivers/acpi/video_detect.c | 64 ++++++++++++ drivers/ata/ahci.h | 2 drivers/ata/ahci_imx.c | 2 drivers/base/arch_topology.c | 19 +++ drivers/cpufreq/qcom-cpufreq-nvmem.c | 10 +- drivers/dma/mxs-dma.c | 48 +-------- drivers/gpu/drm/virtio/virtgpu_plane.c | 6 - drivers/hid/hid-magicmouse.c | 2 drivers/hwmon/coretemp.c | 56 ++++++++--- drivers/i2c/busses/i2c-qcom-cci.c | 13 +- drivers/iommu/intel/iommu.c | 5 + drivers/media/platform/qcom/venus/vdec.c | 2 drivers/media/rc/mceusb.c | 2 drivers/mmc/core/block.c | 7 + drivers/mmc/core/card.h | 6 + drivers/mmc/core/quirks.h | 6 + drivers/mmc/host/sdhci-tegra.c | 2 drivers/net/ethernet/hisilicon/hns/hnae.c | 4 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 3 drivers/net/ethernet/intel/i40e/i40e_main.c | 16 +-- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 13 +- drivers/net/ethernet/intel/i40e/i40e_txrx.h | 1 drivers/net/ethernet/intel/i40e/i40e_xsk.c | 67 +++++++++++-- drivers/net/ethernet/intel/i40e/i40e_xsk.h | 2 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 12 +- drivers/net/ethernet/sfc/ef10.c | 58 ++++------- drivers/net/ethernet/sfc/filter.h | 3 drivers/net/ethernet/sfc/rx_common.c | 10 +- drivers/net/hyperv/hyperv_net.h | 3 drivers/net/hyperv/netvsc.c | 4 drivers/net/hyperv/netvsc_drv.c | 20 ++++ drivers/net/phy/dp83822.c | 3 drivers/net/phy/dp83867.c | 8 + drivers/net/usb/cdc_ether.c | 7 + drivers/net/usb/r8152.c | 1 drivers/nvme/host/core.c | 7 + drivers/nvme/host/hwmon.c | 58 ++++++++--- drivers/nvme/host/nvme.h | 8 + drivers/xen/gntdev-common.h | 3 drivers/xen/gntdev.c | 94 +++++-------------- fs/btrfs/backref.c | 46 ++++++--- fs/cifs/cifsfs.c | 7 + fs/cifs/file.c | 11 +- fs/cifs/sess.c | 1 fs/fcntl.c | 32 ++++-- fs/ocfs2/namei.c | 23 ++-- fs/proc/task_mmu.c | 2 include/linux/kvm_host.h | 2 include/linux/mmc/card.h | 1 include/net/sch_generic.h | 1 include/net/sock_reuseport.h | 11 +- kernel/trace/trace.c | 12 +- net/atm/mpoa_proc.c | 3 net/core/sock_reuseport.c | 16 +++ net/hsr/hsr_forward.c | 12 +- net/ipv4/datagram.c | 2 net/ipv4/udp.c | 2 net/ipv6/datagram.c | 2 net/ipv6/udp.c | 2 net/sched/sch_api.c | 5 - net/sched/sch_atm.c | 1 net/sched/sch_cake.c | 4 net/sched/sch_cbq.c | 1 net/sched/sch_choke.c | 2 net/sched/sch_drr.c | 2 net/sched/sch_dsmark.c | 2 net/sched/sch_etf.c | 3 net/sched/sch_ets.c | 2 net/sched/sch_fq_codel.c | 2 net/sched/sch_fq_pie.c | 3 net/sched/sch_hfsc.c | 2 net/sched/sch_htb.c | 2 net/sched/sch_multiq.c | 1 net/sched/sch_prio.c | 2 net/sched/sch_qfq.c | 2 net/sched/sch_red.c | 2 net/sched/sch_sfb.c | 5 - net/sched/sch_skbprio.c | 3 net/sched/sch_taprio.c | 2 net/sched/sch_tbf.c | 2 net/sched/sch_teql.c | 1 net/tipc/discover.c | 2 net/tipc/topsrv.c | 2 security/selinux/ss/services.c | 5 - security/selinux/ss/sidtab.c | 4 security/selinux/ss/sidtab.h | 2 tools/perf/util/parse-events.c | 6 + tools/perf/util/pmu.c | 50 ++++++++++ tools/perf/util/pmu.h | 5 + tools/perf/util/pmu.l | 2 tools/perf/util/pmu.y | 15 --- virt/kvm/kvm_main.c | 11 ++ 111 files changed, 802 insertions(+), 454 deletions(-)
Adrian Hunter (1):
perf/x86/intel/pt: Relax address filter validation
Alexander Graf (1):
kvm: Add support for arch compat vm ioctls
Alexander Potapenko (1):
tipc: fix an information leak in tipc_topsrv_kern_subscr
Alexander Stein (1):
ata: ahci-imx: Fix MODULE_ALIAS
Avri Altman (1):
mmc: core: Add SD card quirk for broken discard
Borislav Petkov (1):
x86/microcode/AMD: Apply the patch early on every logical thread
Brett Creeley (1):
ionic: catch NULL pointer issue on reconfig
Bryan O'Donoghue (2):
i2c: qcom-cci: Fix ordering of pm_runtime_xx and i2c_add_adapter
media: venus: dec: Handle the case where find_format fails
Charlotte Tan (1):
iommu/vt-d: Allow NVS regions in arch_rmrr_sanity_check()
Christoph Hellwig (1):
nvme-hwmon: consistently ignore errors from nvme_hwmon_init
Conor Dooley (2):
arm64: topology: move store_cpu_topology() to shared code
riscv: topology: fix default topology reporting
Daniel Wagner (1):
nvme-hwmon: Return error code when registration fails
Dario Binacchi (1):
dmaengine: mxs: use platform_driver_register
Desmond Cheong Zhi Xi (1):
fcntl: fix potential deadlocks for &fown_struct.lock
Dmitry Osipenko (1):
drm/virtio: Use appropriate atomic state in virtio_gpu_plane_cleanup_fb()
Eric Dumazet (2):
net: hsr: avoid possible NULL deref in skb_clone()
net: sched: fix race condition in qdisc_graft()
Eric Ren (1):
KVM: arm64: vgic: Fix exit condition in scan_its_table()
Fabien Parent (2):
cpufreq: qcom: fix writes in read-only memory region
cpufreq: qcom: fix memory leak in error path
Fabio Estevam (1):
dmaengine: mxs-dma: Remove the unused .id_table
Felix Riemann (1):
net: phy: dp83822: disable MDI crossover status change interrupt
Filipe Manana (2):
btrfs: fix processing of delayed data refs during backref walking
btrfs: fix processing of delayed tree block refs during backref walking
GONG, Ruiqi (1):
selinux: enable use of both GFP_KERNEL and GFP_ATOMIC in convert_context()
Gaurav Kohli (1):
hv_netvsc: Fix race between VF offering and VF association message from host
Greg Kroah-Hartman (1):
Linux 5.10.152
Hannes Reinecke (1):
nvme-hwmon: rework to avoid devm allocation
Harini Katakam (1):
net: phy: dp83867: Extend RX strap quirk for SGMII mode
James Morse (1):
arm64: errata: Remove AES hwcap for COMPAT tasks
Jan Sokolowski (1):
i40e: Fix DMA mappings leak
Jean-Francois Le Fillatre (1):
r8152: add PID for the Lenovo OneLink+ Dock
Jerry Snitselaar (1):
iommu/vt-d: Clean up si_domain in the init_dmars() error path
Jin Yao (1):
perf pmu: Validate raw event with sysfs exported format bits
Jonathan Cooper (1):
sfc: Change VF mac via PF as first preference if available.
Joseph Qi (2):
ocfs2: clear dinode links count in case of error
ocfs2: fix BUG when iput after ocfs2_mknod fails
José Expósito (1):
HID: magicmouse: Do not set BTN_MOUSE on double report
Juergen Gross (1):
xen: assume XENFEAT_gnttab_map_avail_bits being set for pv guests
Kai-Heng Feng (1):
ata: ahci: Match EM_MAX_SLOTS with SATA_PMP_MAX_PORTS
Kefeng Wang (1):
riscv: Add machine name to kernel boot log and stack dump output
Kuniyuki Iwashima (1):
udp: Update reuse->has_conns under reuseport_lock.
Lei Chen (1):
block: wbt: Remove unnecessary invoking of wbt_update_limits in wbt_init
M. Vefa Bicakci (1):
xen/gntdev: Accommodate VMA splitting
Mark Tomlinson (1):
tipc: Fix recognition of trial period
Nathan Chancellor (1):
x86/Kconfig: Drop check for -mabi=ms for CONFIG_EFI_STUB
Nick Desaulniers (1):
Makefile.debug: re-enable debug info for .S files
Pavel Tikhomirov (1):
fcntl: make F_GETOWN(EX) return 0 on dead owner task
Pieter Jansen van Vuuren (1):
sfc: include vport_id in filter spec hash and equal()
Prathamesh Shete (1):
mmc: sdhci-tegra: Use actual clock rate for SW tuning correction
Rob Herring (1):
perf: Skip and warn on unknown format 'configN' attrs
Sean Young (1):
media: mceusb: set timeout to at least timeout provided
Serge Semin (1):
nvme-hwmon: kmalloc the NVME SMART log buffer
Seth Jenkins (1):
mm: /proc/pid/smaps_rollup: fix no vma's null-deref
Sibi Sankar (1):
arm64: dts: qcom: sc7180-trogdor: Fixup modem memory region
Steven Rostedt (Google) (1):
tracing: Do not free snapshot if tracer is on cmdline
Tony Luck (1):
ACPI: extlog: Handle multiple records
Wenting Zhang (1):
riscv: always honor the CONFIG_CMDLINE_FORCE when parsing dtb
Werner Sembach (1):
ACPI: video: Force backlight native for more TongFang devices
Xiaobo Liu (1):
net/atm: fix proc_mpc_write incorrect return value
Yang Yingliang (1):
net: hns: fix possible memory leak in hnae_ae_register()
Yu Kuai (2):
blk-wbt: call rq_qos_add() after wb_normal is initialized
blk-wbt: fix that 'rwb->wc' is always set to 1 in wbt_init()
Zhang Rui (1):
hwmon/coretemp: Handle large core ID value
Zhang Xiaoxu (3):
cifs: Fix xid leak in cifs_copy_file_range()
cifs: Fix xid leak in cifs_flock()
cifs: Fix xid leak in cifs_ses_add_channel()
Zhengchao Shao (3):
net: sched: cake: fix null pointer access issue when cake_init() fails
net: sched: delete duplicate cleanup of backlog and qlen
net: sched: sfb: fix null pointer access issue when sfb_init() fails
sunliming (1):
tracing: Simplify conditional compilation code in tracing_set_tracer()
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +4 -0
@@ -76,10 +76,14 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A57 | #1319537 | ARM64_ERRATUM_1319367 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Cortex-A57 | #1742098 | ARM64_ERRATUM_1742098 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A72 | #853709 | N/A | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A72 | #1319367 | ARM64_ERRATUM_1319367 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Cortex-A72 | #1655431 | ARM64_ERRATUM_1742098 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A73 | #858921 | ARM64_ERRATUM_858921 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A76 | #1188873,1418040| ARM64_ERRATUM_1418040 |
Makefile +4 -2
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 151 +SUBLEVEL = 152 EXTRAVERSION = NAME = Dare mighty things
@@ -842,7 +842,9 @@ else DEBUG_CFLAGS += -g endif -ifneq ($(LLVM_IAS),1) +ifeq ($(LLVM_IAS),1) +KBUILD_AFLAGS += -g +else KBUILD_AFLAGS += -Wa,-gdwarf-2 endif
arch/arm64/Kconfig +16 -0
@@ -481,6 +481,22 @@ config ARM64_ERRATUM_834220 If unsure, say Y. +config ARM64_ERRATUM_1742098 + bool "Cortex-A57/A72: 1742098: ELR recorded incorrectly on interrupt taken between cryptographic instructions in a sequence" + depends on COMPAT + default y + help + This option removes the AES hwcap for aarch32 user-space to + workaround erratum 1742098 on Cortex-A57 and Cortex-A72. + + Affected parts may corrupt the AES state if an interrupt is + taken between a pair of AES instructions. These instructions + are only present if the cryptography extensions are present. + All software should have a fallback implementation for CPUs + that don't implement the cryptography extensions. + + If unsure, say Y. + config ARM64_ERRATUM_845719 bool "Cortex-A53: 845719: a load might read incorrect data" depends on COMPAT
arch/arm64/boot/dts/qcom/sc7180-trogdor-lte-sku.dtsi +4 -0
@@ -9,6 +9,10 @@ &ap_sar_sensor { label = "proximity-wifi-lte"; }; +&mpss_mem { + reg = <0x0 0x86000000 0x0 0x8c00000>; +}; + &remoteproc_mpss { firmware-name = "qcom/sc7180-trogdor/modem/mba.mbn", "qcom/sc7180-trogdor/modem/qdsp6sw.mbn";
arch/arm64/boot/dts/qcom/sc7180-trogdor.dtsi +1 -1
@@ -39,7 +39,7 @@ atf_mem: memory@80b00000 { }; mpss_mem: memory@86000000 { - reg = <0x0 0x86000000 0x0 0x8c00000>; + reg = <0x0 0x86000000 0x0 0x2000000>; no-map; };
arch/arm64/include/asm/cpucaps.h +2 -1
@@ -68,7 +68,8 @@#define ARM64_WORKAROUND_1508412 58#define ARM64_SPECTRE_BHB 59#define ARM64_WORKAROUND_2457168 60 +#define ARM64_WORKAROUND_1742098 61 -#define ARM64_NCAPS 61 +#define ARM64_NCAPS 62#endif /* __ASM_CPUCAPS_H */
arch/arm64/kernel/cpu_errata.c +16 -0
@@ -356,6 +356,14 @@ static const struct midr_range erratum_1463225[] = { };#endif +#ifdef CONFIG_ARM64_ERRATUM_1742098 +static struct midr_range broken_aarch32_aes[] = { +MIDR_RANGE (MIDR_CORTEX_A57 ,0 ,1 ,0xf ,0xf ), +MIDR_ALL_VERSIONS (MIDR_CORTEX_A72 ), + {}, +}; +#endif + const struct arm64_cpu_capabilities arm64_errata[] = {#ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE {
@@ -554,6 +562,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = {/* Cortex-A510 r0p0-r1p1 */ CAP_MIDR_RANGE(MIDR_CORTEX_A510, 0, 0, 1, 1) }, +#endif +#ifdef CONFIG_ARM64_ERRATUM_1742098 + { + .desc = "ARM erratum 1742098", + .capability = ARM64_WORKAROUND_1742098, + CAP_MIDR_RANGE_LIST(broken_aarch32_aes), + .type = ARM64_CPUCAP_LOCAL_CPU_ERRATUM, + }, #endif { }
arch/arm64/kernel/cpufeature.c +12 -1
@@ -76,6 +76,7 @@#include <asm/cpufeature.h> #include <asm/cpu_ops.h> #include <asm/fpsimd.h> +#include <asm/hwcap.h> #include <asm/mmu_context.h> #include <asm/mte.h> #include <asm/processor.h>
@@ -1730,6 +1731,14 @@ static void cpu_enable_mte(struct arm64_cpu_capabilities const *cap) }#endif /* CONFIG_ARM64_MTE */ +static void elf_hwcap_fixup (void ) +{ +#ifdef CONFIG_ARM64_ERRATUM_1742098 +if (cpus_have_const_cap (ARM64_WORKAROUND_1742098 )) + compat_elf_hwcap2 &= ~COMPAT_HWCAP2_AES ; +#endif /* ARM64_ERRATUM_1742098 */ +} +/* Internal helper functions to match cpu capability type */ static bool cpucap_late_cpu_optional (const struct arm64_cpu_capabilities *cap)
@@ -2735,8 +2744,10 @@ void __init setup_cpu_features(void)setup_system_capabilities ();setup_elf_hwcaps (arm64_elf_hwcaps); -if (system_supports_32bit_el0 ()) +if (system_supports_32bit_el0 ()) {setup_elf_hwcaps (compat_elf_hwcaps); +elf_hwcap_fixup (); + }if (system_uses_ttbr0_pan ())pr_info ("emulated: Privileged Access Never (PAN) using TTBR0_EL1 switching\n" );
arch/arm64/kernel/topology.c +0 -40
@@ -22,46 +22,6 @@#include <asm/cputype.h> #include <asm/topology.h> -void store_cpu_topology (unsigned int cpuid) -{ -struct cpu_topology *cpuid_topo = &cpu_topology[cpuid]; -u64 mpidr; - -if (cpuid_topo->package_id !=-1 ) - goto topology_populated; - - mpidr =read_cpuid_mpidr (); - -/* Uniprocessor systems can rely on default topology values */ -if (mpidr &MPIDR_UP_BITMASK ) -return ; - -/* -* This would be the place to create cpu topology based on MPIDR. -* -* However, it cannot be trusted to depict the actual topology; some -* pieces of the architecture enforce an artificial cap on Aff0 values -* (e.g. GICv3's ICC_SGI1R_EL1 limits it to 15), leading to an -* artificial cycling of Aff1, Aff2 and Aff3 values. IOW, these end up -* having absolutely no relationship to the actual underlying system -* topology, and cannot be reasonably used as core / package ID. -* -* If the MT bit is set, Aff0 *could* be used to define a thread ID, but -* we still wouldn't be able to obtain a sane core ID. This means we -* need to entirely ignore MPIDR for any topology deduction. -*/ - cpuid_topo->thread_id =-1 ; - cpuid_topo->core_id = cpuid; - cpuid_topo->package_id =cpu_to_node (cpuid); - -pr_debug ("CPU%u: cluster %d core %d thread %d mpidr %#016llx\n" , - cpuid, cpuid_topo->package_id, cpuid_topo->core_id, - cpuid_topo->thread_id, mpidr); - -topology_populated: -update_siblings_masks (cpuid); -} -#ifdef CONFIG_ACPI static bool __init acpi_cpu_is_threaded (int cpu) {
arch/arm64/kvm/vgic/vgic-its.c +4 -1
@@ -2096,7 +2096,7 @@ static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,memset (entry,0 , esz); -while (len >0 ) { +while (true) {int next_offset;size_t byte_offset;
@@ -2109,6 +2109,9 @@ static int scan_its_table(struct vgic_its *its, gpa_t base, int size, u32 esz,return next_offset; byte_offset = next_offset * esz; +if (byte_offset >= len) +break ; + id += next_offset; gpa += byte_offset; len -= byte_offset;
arch/riscv/Kconfig +1 -1
@@ -35,7 +35,7 @@ config RISCV select CLINT_TIMER if !MMU select COMMON_CLK select EDAC_SUPPORT - select GENERIC_ARCH_TOPOLOGY if SMP + select GENERIC_ARCH_TOPOLOGY select GENERIC_ATOMIC64 if !64BIT select GENERIC_CLOCKEVENTS select GENERIC_EARLY_IOREMAP
arch/riscv/kernel/setup.c +10 -3
@@ -54,10 +54,17 @@ static DEFINE_PER_CPU(struct cpu, cpu_devices);static void __init parse_dtb (void ) {/* Early scan of device tree from init memory */ -if (early_init_dt_scan (dtb_early_va)) -return ; +if (early_init_dt_scan (dtb_early_va)) { +const char *name =of_flat_dt_get_machine_name (); + +if (name) { +pr_info ("Machine model: %s\n" , name); +dump_stack_set_arch_desc ("%s (DT)" , name); + } + }else { +pr_err ("No DTB passed to the kernel\n" ); + } -pr_err ("No DTB passed to the kernel\n" );#ifdef CONFIG_CMDLINE_FORCE strlcpy (boot_command_line,CONFIG_CMDLINE ,COMMAND_LINE_SIZE );pr_info ("Forcing kernel command line to: %s\n" , boot_command_line);
arch/riscv/kernel/smpboot.c +3 -1
@@ -46,6 +46,8 @@ void __init smp_prepare_cpus(unsigned int max_cpus)int cpuid;int ret; +store_cpu_topology (smp_processor_id ()); +/* This covers non-smp usecase mandated by "nosmp" option */ if (max_cpus ==0 )return ;
@@ -152,8 +154,8 @@ asmlinkage __visible void smp_callin(void)mmgrab (mm); current->active_mm = mm; +store_cpu_topology (curr_cpuid);notify_cpu_starting (curr_cpuid); -update_siblings_masks (curr_cpuid);set_cpu_online (curr_cpuid,1 );/*
arch/x86/Kconfig +0 -1
@@ -1945,7 +1945,6 @@ config EFI config EFI_STUB bool "EFI stub support" depends on EFI && !X86_USE_3DNOW - depends on $(cc-option,-mabi=ms) || X86_32 select RELOCATABLE help This kernel feature allows a bzImage to be loaded directly
arch/x86/events/intel/pt.c +50 -13
90 lines not on this page · raw message
arch/x86/include/asm/iommu.h +3 -1
@@ -17,8 +17,10 @@ arch_rmrr_sanity_check(struct acpi_dmar_reserved_memory *rmrr) {u64 start = rmrr->base_address;u64 end = rmrr->end_address +1 ; +int entry_type; -if (e820__mapped_all (start, end,E820_TYPE_RESERVED )) + entry_type =e820__get_entry_type (start, end); +if (entry_type ==E820_TYPE_RESERVED || entry_type ==E820_TYPE_NVS )return 0 ; pr_err(FW_BUG "No firmware reserved region can cover this RMRR [%#018Lx-%#018Lx], contact BIOS vendor for fixes\n",
arch/x86/kernel/cpu/microcode/amd.c +13 -3
@@ -441,7 +441,13 @@ apply_microcode_early_amd(u32 cpuid_1_eax, void *ucode, size_t size, bool save_preturn ret;native_rdmsr (MSR_AMD64_PATCH_LEVEL , rev, dummy); -if (rev >= mc->hdr.patch_id) + +/* +* Allow application of the same revision to pick up SMT-specific +* changes even if the revision of the other SMT thread is already +* up-to-date. +*/ +if (rev > mc->hdr.patch_id)return ret;if (!__apply_microcode_amd (mc)) {
@@ -523,8 +529,12 @@ void load_ucode_amd_ap(unsigned int cpuid_1_eax)native_rdmsr (MSR_AMD64_PATCH_LEVEL , rev, dummy); -/* Check whether we have saved a new patch already: */ -if (*new_rev && rev < mc->hdr.patch_id) { +/* +* Check whether a new patch has been saved already. Also, allow application of +* the same revision in order to pick up SMT-thread-specific configuration even +* if the sibling SMT thread already has an up-to-date revision. +*/ +if (*new_rev && rev <= mc->hdr.patch_id) {if (!__apply_microcode_amd (mc)) { *new_rev = mc->hdr.patch_id;return ;
block/blk-wbt.c +4 -7
@@ -838,9 +838,11 @@ int wbt_init(struct request_queue *q) rwb->last_comp = rwb->last_issue = jiffies; rwb->win_nsec =RWB_WINDOW_NSEC ; rwb->enable_state =WBT_STATE_ON_DEFAULT ; - rwb->wc =1 ; + rwb->wc =test_bit (QUEUE_FLAG_WC , &q->queue_flags); rwb->rq_depth.default_depth =RWB_DEF_DEPTH ; -wbt_update_limits (rwb); + rwb->min_lat_nsec =wbt_default_latency_nsec (q); + +wbt_queue_depth_changed (&rwb->rqos);/* * Assign rwb and add the stats callback.
@@ -848,10 +850,5 @@ int wbt_init(struct request_queue *q)rq_qos_add (q, &rwb->rqos);blk_stat_add_callback (q, rwb->cb); - rwb->min_lat_nsec =wbt_default_latency_nsec (q); - -wbt_queue_depth_changed (&rwb->rqos); -wbt_set_write_cache (q,test_bit (QUEUE_FLAG_WC , &q->queue_flags)); -return 0 ; }
drivers/acpi/acpi_extlog.c +20 -13
@@ -12,6 +12,7 @@#include <linux/ratelimit.h> #include <linux/edac.h> #include <linux/ras.h> +#include <acpi/ghes.h> #include <asm/cpu.h> #include <asm/mce.h>
@@ -138,8 +139,8 @@ static int extlog_print(struct notifier_block *nb, unsigned long val,int cpu = mce->extcpu;struct acpi_hest_generic_status *estatus, *tmp;struct acpi_hest_generic_data *gdata; -const guid_t *fru_id = &guid_null; -char *fru_text ="" ; +const guid_t *fru_id; +char *fru_text;guid_t *sec_type;static u32 err_seq;
@@ -160,17 +161,23 @@ static int extlog_print(struct notifier_block *nb, unsigned long val,/* log event via trace */ err_seq++; - gdata = (struct acpi_hest_generic_data *)(tmp +1 ); -if (gdata->validation_bits &CPER_SEC_VALID_FRU_ID ) - fru_id = (guid_t *)gdata->fru_id; -if (gdata->validation_bits &CPER_SEC_VALID_FRU_TEXT ) - fru_text = gdata->fru_text; - sec_type = (guid_t *)gdata->section_type; -if (guid_equal (sec_type, &CPER_SEC_PLATFORM_MEM )) { -struct cper_sec_mem_err *mem = (void *)(gdata +1 ); -if (gdata->error_data_length >=sizeof (*mem)) -trace_extlog_mem_event (mem, err_seq, fru_id, fru_text, - (u8 )gdata->error_severity); +apei_estatus_for_each_section (tmp, gdata) { +if (gdata->validation_bits &CPER_SEC_VALID_FRU_ID ) + fru_id = (guid_t *)gdata->fru_id; +else + fru_id = &guid_null; +if (gdata->validation_bits &CPER_SEC_VALID_FRU_TEXT ) + fru_text = gdata->fru_text; +else + fru_text ="" ; + sec_type = (guid_t *)gdata->section_type; +if (guid_equal (sec_type, &CPER_SEC_PLATFORM_MEM )) { +struct cper_sec_mem_err *mem = (void *)(gdata +1 ); + +if (gdata->error_data_length >=sizeof (*mem)) +trace_extlog_mem_event (mem, err_seq, fru_id, fru_text, + (u8 )gdata->error_severity); + } } out:
drivers/acpi/video_detect.c +64 -0
70 lines not on this page · raw message
drivers/ata/ahci.h +1 -1
@@ -254,7 +254,7 @@ enum {PCS_7 =0x94 ,/* 7+ port PCS (Denverton) */ /* em constants */ -EM_MAX_SLOTS =8 , +EM_MAX_SLOTS =SATA_PMP_MAX_PORTS , EM_MAX_RETRY = 5,/* em_ctl bits */
drivers/ata/ahci_imx.c +1 -1
@@ -1230,4 +1230,4 @@ module_platform_driver(imx_ahci_driver);MODULE_DESCRIPTION ("Freescale i.MX AHCI SATA platform driver" );MODULE_AUTHOR ("Richard Zhu <[email protected]>" );MODULE_LICENSE ("GPL" ); -MODULE_ALIAS ("ahci:imx" ); +MODULE_ALIAS ("platform:" DRV_NAME );
drivers/base/arch_topology.c +19 -0
@@ -596,4 +596,23 @@ void __init init_cpu_topology(void) else if (of_have_populated_dt() && parse_dt_topology()) reset_cpu_topology(); } + +void store_cpu_topology (unsigned int cpuid) +{ +struct cpu_topology *cpuid_topo = &cpu_topology[cpuid]; + +if (cpuid_topo->package_id !=-1 ) + goto topology_populated; + + cpuid_topo->thread_id =-1 ; + cpuid_topo->core_id = cpuid; + cpuid_topo->package_id =cpu_to_node (cpuid); + +pr_debug ("CPU%u: package %d core %d thread %d\n" , + cpuid, cpuid_topo->package_id, cpuid_topo->core_id, + cpuid_topo->thread_id); + +topology_populated: +update_siblings_masks (cpuid); +}#endif
drivers/cpufreq/qcom-cpufreq-nvmem.c +7 -3
@@ -215,6 +215,7 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,int speed =0 , pvs =0 , pvs_ver =0 ;u8 *speedbin;size_t len; +int ret =0 ; speedbin =nvmem_cell_read (speedbin_nvmem, &len);
@@ -232,7 +233,8 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev,break ;default :dev_err (cpu_dev,"Unable to read nvmem data. Defaulting to 0!\n" ); -return -ENODEV ; + ret = -ENODEV ; + goto len_error; } snprintf(*pvs_name, sizeof("speedXX-pvsXX-vXX"), "speed%d-pvs%d-v%d",
@@ -240,8 +242,9 @@ static int qcom_cpufreq_krait_name_version(struct device *cpu_dev, drv->versions = (1 << speed); +len_error:kfree (speedbin); -return 0 ; +return ret; }static const struct qcom_cpufreq_match_data match_data_kryo = {
@@ -264,7 +267,8 @@ static int qcom_cpufreq_probe(struct platform_device *pdev)struct nvmem_cell *speedbin_nvmem;struct device_node *np;struct device *cpu_dev; -char *pvs_name ="speedXX-pvsXX-vXX" ; +char pvs_name_buffer[] ="speedXX-pvsXX-vXX" ; +char *pvs_name = pvs_name_buffer;unsigned cpu;const struct of_device_id *match;int ret;
drivers/dma/mxs-dma.c +9 -39
80 lines not on this page · raw message
drivers/gpu/drm/virtio/virtgpu_plane.c +3 -3
@@ -213,14 +213,14 @@ static int virtio_gpu_cursor_prepare_fb(struct drm_plane *plane, }static void virtio_gpu_cursor_cleanup_fb (struct drm_plane *plane, -struct drm_plane_state *old_state) +struct drm_plane_state *state) {struct virtio_gpu_framebuffer *vgfb; -if (!plane->state->fb) +if (!state->fb)return ; - vgfb =to_virtio_gpu_framebuffer (plane->state->fb); + vgfb =to_virtio_gpu_framebuffer (state->fb);if (vgfb->fence) {dma_fence_put (&vgfb->fence->f); vgfb->fence =NULL ;
drivers/hid/hid-magicmouse.c +1 -1
@@ -387,7 +387,7 @@ static int magicmouse_raw_event(struct hid_device *hdev,magicmouse_raw_event (hdev, report, data +2 , data[1 ]);magicmouse_raw_event (hdev, report, data +2 + data[1 ], size -2 - data[1 ]); -break ; +return 0 ;default :return 0 ; }
drivers/hwmon/coretemp.c +41 -15
127 lines not on this page · raw message
drivers/i2c/busses/i2c-qcom-cci.c +8 -5
@@ -638,6 +638,11 @@ static int cci_probe(struct platform_device *pdev)if (ret <0 ) goto error; +pm_runtime_set_autosuspend_delay (dev,MSEC_PER_SEC ); +pm_runtime_use_autosuspend (dev); +pm_runtime_set_active (dev); +pm_runtime_enable (dev); +for (i =0 ; i < cci->data->num_masters; i++) {if (!cci->master[i].cci)continue ;
@@ -649,14 +654,12 @@ static int cci_probe(struct platform_device *pdev) } } -pm_runtime_set_autosuspend_delay (dev,MSEC_PER_SEC ); -pm_runtime_use_autosuspend (dev); -pm_runtime_set_active (dev); -pm_runtime_enable (dev); -return 0 ; error_i2c: +pm_runtime_disable (dev); +pm_runtime_dont_use_autosuspend (dev); +for (--i ; i >=0 ; i--) {if (cci->master[i].cci) {i2c_del_adapter (&cci->master[i].adap);
drivers/iommu/intel/iommu.c +5 -0
@@ -2846,6 +2846,7 @@ static int __init si_domain_init(int hw)if (md_domain_init (si_domain,DEFAULT_DOMAIN_ADDRESS_WIDTH )) {domain_exit (si_domain); + si_domain =NULL ;return -EFAULT ; }
@@ -3505,6 +3506,10 @@ static int __init init_dmars(void)disable_dmar_iommu (iommu);free_dmar_iommu (iommu); } +if (si_domain) { +domain_exit (si_domain); + si_domain =NULL ; + }kfree (g_iommus);
drivers/media/platform/qcom/venus/vdec.c +2 -0
@@ -158,6 +158,8 @@ vdec_try_fmt_common(struct venus_inst *inst, struct v4l2_format *f)else return NULL ; fmt =find_format (inst, pixmp->pixelformat, f->type); +if (!fmt) +return NULL ; } pixmp->width = clamp(pixmp->width, frame_width_min(inst),
drivers/media/rc/mceusb.c +1 -1
@@ -1077,7 +1077,7 @@ static int mceusb_set_timeout(struct rc_dev *dev, unsigned int timeout)struct mceusb_dev *ir = dev->priv;unsigned int units; - units =DIV_ROUND_CLOSEST (timeout,MCE_TIME_UNIT ); + units =DIV_ROUND_UP (timeout,MCE_TIME_UNIT ); cmdbuf[2 ] = units >>8 ; cmdbuf[3 ] = units;
drivers/mmc/core/block.c +6 -1
@@ -1069,6 +1069,11 @@ static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) nr =blk_rq_sectors (req); do { + unsigned int erase_arg = card->erase_arg; + + if (mmc_card_broken_sd_discard(card)) + erase_arg = SD_ERASE_ARG; + err = 0; if (card->quirks & MMC_QUIRK_INAND_CMD38) { err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
@@ -1079,7 +1084,7 @@ static void mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) card->ext_csd.generic_cmd6_time); }if (!err) - err =mmc_erase (card, from, nr, card->erase_arg); + err =mmc_erase (card, from, nr, erase_arg); }while (err == -EIO && !mmc_blk_reset (md, card->host, type));if (err) status =BLK_STS_IOERR ;
drivers/mmc/core/card.h +6 -0
@@ -70,6 +70,7 @@ struct mmc_fixup {#define EXT_CSD_REV_ANY (-1u)#define CID_MANFID_SANDISK 0x2 +#define CID_MANFID_SANDISK_SD 0x3#define CID_MANFID_ATP 0x9#define CID_MANFID_TOSHIBA 0x11#define CID_MANFID_MICRON 0x13
@@ -222,4 +223,9 @@ static inline int mmc_card_broken_hpi(const struct mmc_card *c) return c->quirks & MMC_QUIRK_BROKEN_HPI; } +static inline int mmc_card_broken_sd_discard (const struct mmc_card *c) +{ +return c->quirks &MMC_QUIRK_BROKEN_SD_DISCARD ; +} +#endif
drivers/mmc/core/quirks.h +6 -0
@@ -99,6 +99,12 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = {MMC_FIXUP ("V10016" ,CID_MANFID_KINGSTON ,CID_OEMID_ANY , add_quirk_mmc,MMC_QUIRK_TRIM_BROKEN ), +/* +* Some SD cards reports discard support while they don't +*/ +MMC_FIXUP (CID_NAME_ANY ,CID_MANFID_SANDISK_SD ,0x5344 , add_quirk_sd, +MMC_QUIRK_BROKEN_SD_DISCARD ), + END_FIXUP };
drivers/mmc/host/sdhci-tegra.c +1 -1
@@ -760,7 +760,7 @@ static void tegra_sdhci_set_clock(struct sdhci_host *host, unsigned int clock)*/ host_clk = tegra_host->ddr_signaling ? clock *2 : clock;clk_set_rate (pltfm_host->clk, host_clk); - tegra_host->curr_clk_rate = host_clk; + tegra_host->curr_clk_rate =clk_get_rate (pltfm_host->clk);if (tegra_host->ddr_signaling) host->max_clk = host_clk;else
drivers/net/ethernet/hisilicon/hns/hnae.c +3 -1
@@ -419,8 +419,10 @@ int hnae_ae_register(struct hnae_ae_dev *hdev, struct module *owner) hdev->cls_dev.release = hnae_release; (void )dev_set_name (&hdev->cls_dev,"hnae%d" , hdev->id); ret =device_register (&hdev->cls_dev); -if (ret) +if (ret) { +put_device (&hdev->cls_dev);return ret; + }__module_get (THIS_MODULE );
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +0 -3
@@ -2081,9 +2081,6 @@ static int i40e_set_ringparam(struct net_device *netdev,*/ rx_rings[i].tail = hw->hw_addr +I40E_PRTGEN_STATUS ; err =i40e_setup_rx_descriptors (&rx_rings[i]); -if (err) - goto rx_unwind; - err =i40e_alloc_rx_bi (&rx_rings[i]);if (err) goto rx_unwind;
drivers/net/ethernet/intel/i40e/i40e_main.c +9 -7
@@ -3409,12 +3409,8 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring)if (ring->vsi->type ==I40E_VSI_MAIN )xdp_rxq_info_unreg_mem_model (&ring->xdp_rxq); -kfree (ring->rx_bi); ring->xsk_pool =i40e_xsk_pool (ring);if (ring->xsk_pool) { - ret =i40e_alloc_rx_bi_zc (ring); -if (ret) -return ret; ring->rx_buf_len =xsk_pool_get_rx_frame_size (ring->xsk_pool);/* For AF_XDP ZC, we disallow packets to span on
@@ -3432,9 +3428,6 @@ static int i40e_configure_rx_ring(struct i40e_ring *ring) ring->queue_index); }else { - ret =i40e_alloc_rx_bi (ring); -if (ret) -return ret; ring->rx_buf_len = vsi->rx_buf_len;if (ring->vsi->type ==I40E_VSI_MAIN ) { ret = xdp_rxq_info_reg_mem_model(&ring->xdp_rxq,
@@ -12684,6 +12677,14 @@ static int i40e_xdp_setup(struct i40e_vsi *vsi,i40e_reset_and_rebuild (pf, true, true); } +if (!i40e_enabled_xdp_vsi (vsi) && prog) { +if (i40e_realloc_rx_bi_zc (vsi, true)) +return -ENOMEM ; + }else if (i40e_enabled_xdp_vsi (vsi) && !prog) { +if (i40e_realloc_rx_bi_zc (vsi, false)) +return -ENOMEM ; + } +for (i =0 ; i < vsi->num_queue_pairs; i++)WRITE_ONCE (vsi->rx_rings[i]->xdp_prog, vsi->xdp_prog);
@@ -12916,6 +12917,7 @@ int i40e_queue_pair_disable(struct i40e_vsi *vsi, int queue_pair)i40e_queue_pair_disable_irq (vsi, queue_pair); err =i40e_queue_pair_toggle_rings (vsi, queue_pair, false/* off */ ); +i40e_clean_rx_ring (vsi->rx_rings[queue_pair]);i40e_queue_pair_toggle_napi (vsi, queue_pair, false/* off */ );i40e_queue_pair_clean_rings (vsi, queue_pair);i40e_queue_pair_reset_stats (vsi, queue_pair);
drivers/net/ethernet/intel/i40e/i40e_txrx.c +5 -8
@@ -1305,14 +1305,6 @@ int i40e_setup_tx_descriptors(struct i40e_ring *tx_ring)return -ENOMEM ; } -int i40e_alloc_rx_bi (struct i40e_ring *rx_ring) -{ -unsigned long sz =sizeof (*rx_ring->rx_bi) * rx_ring->count; - - rx_ring->rx_bi =kzalloc (sz,GFP_KERNEL ); -return rx_ring->rx_bi ?0 : -ENOMEM ; -} -static void i40e_clear_rx_bi (struct i40e_ring *rx_ring) {memset (rx_ring->rx_bi,0 ,sizeof (*rx_ring->rx_bi) * rx_ring->count);
@@ -1443,6 +1435,11 @@ int i40e_setup_rx_descriptors(struct i40e_ring *rx_ring) rx_ring->xdp_prog = rx_ring->vsi->xdp_prog; + rx_ring->rx_bi = +kcalloc (rx_ring->count,sizeof (*rx_ring->rx_bi),GFP_KERNEL ); +if (!rx_ring->rx_bi) +return -ENOMEM ; +return 0 ; }
drivers/net/ethernet/intel/i40e/i40e_txrx.h +0 -1
@@ -465,7 +465,6 @@ int __i40e_maybe_stop_tx(struct i40e_ring *tx_ring, int size);bool __i40e_chk_linearize (struct sk_buff *skb);int i40e_xdp_xmit (struct net_device *dev,int n,struct xdp_frame **frames,u32 flags); -int i40e_alloc_rx_bi (struct i40e_ring *rx_ring);/** * i40e_get_head - Retrieve head from head writeback
drivers/net/ethernet/intel/i40e/i40e_xsk.c +59 -8
91 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_xsk.h +1 -1
@@ -17,7 +17,7 @@ int i40e_clean_rx_irq_zc(struct i40e_ring *rx_ring, int budget);bool i40e_clean_xdp_tx_irq (struct i40e_vsi *vsi,struct i40e_ring *tx_ring);int i40e_xsk_wakeup (struct net_device *dev,u32 queue_id,u32 flags); -int i40e_alloc_rx_bi_zc (struct i40e_ring *rx_ring); +int i40e_realloc_rx_bi_zc (struct i40e_vsi *vsi,bool zc);void i40e_clear_rx_bi_zc (struct i40e_ring *rx_ring);#endif /* _I40E_XSK_H_ */
drivers/net/ethernet/pensando/ionic/ionic_lif.c +8 -4
@@ -2383,11 +2383,15 @@ int ionic_reconfigure_queues(struct ionic_lif *lif,* than the full array, but leave the qcq shells in place */ for (i = lif->nxqs; i < lif->ionic->ntxqs_per_lif; i++) { - lif->txqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; -ionic_qcq_free (lif, lif->txqcqs[i]); +if (lif->txqcqs && lif->txqcqs[i]) { + lif->txqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; +ionic_qcq_free (lif, lif->txqcqs[i]); + } - lif->rxqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; -ionic_qcq_free (lif, lif->rxqcqs[i]); +if (lif->rxqcqs && lif->rxqcqs[i]) { + lif->rxqcqs[i]->flags &= ~IONIC_QCQ_F_INTR ; +ionic_qcq_free (lif, lif->rxqcqs[i]); + } }return err;
drivers/net/ethernet/sfc/ef10.c +24 -34
70 lines not on this page · raw message
drivers/net/ethernet/sfc/filter.h +2 -1
@@ -157,7 +157,8 @@ struct efx_filter_spec { u32 flags:6; u32 dmaq_id:12;u32 rss_context; -__be16 outer_vid__aligned(4) ;/* allow jhash2() of match values */ +u32 vport_id; +__be16 outer_vid;__be16 inner_vid;u8 loc_mac[ETH_ALEN ];u8 rem_mac[ETH_ALEN ];
drivers/net/ethernet/sfc/rx_common.c +5 -5
@@ -676,17 +676,17 @@ bool efx_filter_spec_equal(const struct efx_filter_spec *left, (EFX_FILTER_FLAG_RX | EFX_FILTER_FLAG_TX)))return false; -return memcmp (&left->outer_vid, &right->outer_vid, +return memcmp (&left->vport_id, &right->vport_id,sizeof (struct efx_filter_spec ) - - offsetof(struct efx_filter_spec , outer_vid)) ==0 ; + offsetof(struct efx_filter_spec , vport_id)) ==0 ; }u32 efx_filter_spec_hash (const struct efx_filter_spec *spec) { -BUILD_BUG_ON (offsetof(struct efx_filter_spec , outer_vid) &3 ); -return jhash2 ((const u32 *)&spec->outer_vid, +BUILD_BUG_ON (offsetof(struct efx_filter_spec , vport_id) &3 ); +return jhash2 ((const u32 *)&spec->vport_id, (sizeof (struct efx_filter_spec ) - - offsetof(struct efx_filter_spec , outer_vid)) /4 , + offsetof(struct efx_filter_spec , vport_id)) /4 ,0 ); }
drivers/net/hyperv/hyperv_net.h +2 -1
@@ -977,7 +977,8 @@ struct net_device_context {u32 vf_alloc;/* Serial number of the VF to team with */ u32 vf_serial; - +/* completion variable to confirm vf association */ +struct completion vf_add;/* Is the current data path through the VF NIC? */ bool data_path_is_vf;
drivers/net/hyperv/netvsc.c +4 -0
@@ -1327,6 +1327,10 @@ static void netvsc_send_vf(struct net_device *ndev, net_device_ctx->vf_alloc = nvmsg->msg.v4_msg.vf_assoc.allocated; net_device_ctx->vf_serial = nvmsg->msg.v4_msg.vf_assoc.serial; + +if (net_device_ctx->vf_alloc) +complete (&net_device_ctx->vf_add); +netdev_info (ndev,"VF slot %u %s\n" , net_device_ctx->vf_serial, net_device_ctx->vf_alloc ?"added" :"removed" );
drivers/net/hyperv/netvsc_drv.c +20 -0
@@ -2290,6 +2290,7 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev) {struct device *parent = vf_netdev->dev.parent;struct net_device_context *ndev_ctx; +struct net_device *ndev;struct pci_dev *pdev;u32 serial;
@@ -2316,6 +2317,18 @@ static struct net_device *get_netvsc_byslot(const struct net_device *vf_netdev)return hv_get_drvdata (ndev_ctx->device_ctx); } +/* Fallback path to check synthetic vf with +* help of mac addr +*/ +list_for_each_entry (ndev_ctx, &netvsc_dev_list, list) { + ndev =hv_get_drvdata (ndev_ctx->device_ctx); +if (ether_addr_equal (vf_netdev->perm_addr, ndev->perm_addr)) { +netdev_notice (vf_netdev, +"falling back to mac addr based matching\n" ); +return ndev; + } + } +netdev_notice (vf_netdev,"no netdev found for vf serial:%u\n" , serial);return NULL ;
@@ -2406,6 +2419,11 @@ static int netvsc_vf_changed(struct net_device *vf_netdev)return NOTIFY_OK ; net_device_ctx->data_path_is_vf = vf_is_up; +if (vf_is_up && !net_device_ctx->vf_alloc) { +netdev_info (ndev,"Waiting for the VF association from host\n" ); +wait_for_completion (&net_device_ctx->vf_add); + } +netvsc_switch_datapath (ndev, vf_is_up);netdev_info (ndev,"Data path switched %s VF: %s\n" , vf_is_up ?"to" :"from" , vf_netdev->name);
@@ -2429,6 +2447,7 @@ static int netvsc_unregister_vf(struct net_device *vf_netdev)netvsc_vf_setxdp (vf_netdev,NULL ); +reinit_completion (&net_device_ctx->vf_add);netdev_rx_handler_unregister (vf_netdev);netdev_upper_dev_unlink (vf_netdev, ndev);RCU_INIT_POINTER (net_device_ctx->vf_netdev,NULL );
@@ -2466,6 +2485,7 @@ static int netvsc_probe(struct hv_device *dev,INIT_DELAYED_WORK (&net_device_ctx->dwork, netvsc_link_change); +init_completion (&net_device_ctx->vf_add);spin_lock_init (&net_device_ctx->lock);INIT_LIST_HEAD (&net_device_ctx->reconfig_events);INIT_DELAYED_WORK (&net_device_ctx->vf_takeover, netvsc_vf_setup);
drivers/net/phy/dp83822.c +1 -2
@@ -268,8 +268,7 @@ static int dp83822_config_intr(struct phy_device *phydev) DP83822_EEE_ERROR_CHANGE_INT_EN);if (!dp83822->fx_enabled) - misr_status |=DP83822_MDI_XOVER_INT_EN | -DP83822_ANEG_ERR_INT_EN | + misr_status |=DP83822_ANEG_ERR_INT_EN |DP83822_WOL_PKT_INT_EN ; err =phy_write (phydev,MII_DP83822_MISR2 , misr_status);
drivers/net/phy/dp83867.c +8 -0
@@ -757,6 +757,14 @@ static int dp83867_config_init(struct phy_device *phydev)else val &= ~DP83867_SGMII_TYPE ;phy_write_mmd (phydev,DP83867_DEVADDR ,DP83867_SGMIICTL , val); + +/* This is a SW workaround for link instability if RX_CTRL is +* not strapped to mode 3 or 4 in HW. This is required for SGMII +* in addition to clearing bit 7, handled above. +*/ +if (dp83867->rxctrl_strap_quirk) +phy_set_bits_mmd (phydev,DP83867_DEVADDR ,DP83867_CFG4 , +BIT (8 )); } val =phy_read (phydev,DP83867_CFG3 );
drivers/net/usb/cdc_ether.c +7 -0
@@ -763,6 +763,13 @@ static const struct usb_device_id products[] = { },#endif +/* Lenovo ThinkPad OneLink+ Dock (based on Realtek RTL8153) */ +{ +USB_DEVICE_AND_INTERFACE_INFO (LENOVO_VENDOR_ID ,0x3054 ,USB_CLASS_COMM , + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info =0 , +}, + /* ThinkPad USB-C Dock (based on Realtek RTL8153) */ { USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x3062, USB_CLASS_COMM,
drivers/net/usb/r8152.c +1 -0
@@ -6870,6 +6870,7 @@ static const struct usb_device_id rtl8152_table[] = { {REALTEK_USB_DEVICE(VENDOR_ID_MICROSOFT, 0x0927)}, {REALTEK_USB_DEVICE(VENDOR_ID_SAMSUNG, 0xa101)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x304f)}, + {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3054)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3062)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3069)}, {REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3082)},
drivers/nvme/host/core.c +6 -1
@@ -3232,8 +3232,12 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)return ret;if (!ctrl->identified && !nvme_discovery_ctrl (ctrl)) { +/* +* Do not return errors unless we are in a controller reset, +* the controller works perfectly fine without hwmon. +*/ ret =nvme_hwmon_init (ctrl); -if (ret <0 ) +if (ret == -EINTR )return ret; }
@@ -4485,6 +4489,7 @@ EXPORT_SYMBOL_GPL(nvme_start_ctrl);void nvme_uninit_ctrl (struct nvme_ctrl *ctrl) { +nvme_hwmon_exit (ctrl);nvme_fault_inject_fini (&ctrl->fault_inject);dev_pm_qos_hide_latency_tolerance (ctrl->device);cdev_device_del (&ctrl->cdev, ctrl->device);
drivers/nvme/host/hwmon.c +41 -17
109 lines not on this page · raw message
drivers/nvme/host/nvme.h +8 -0
@@ -257,6 +257,9 @@ struct nvme_ctrl {struct rw_semaphore namespaces_rwsem;struct device ctrl_device;struct device *device;/* char device */ +#ifdef CONFIG_NVME_HWMON +struct device *hwmon_device; +#endif struct cdev cdev;struct work_struct reset_work;struct work_struct delete_work;
@@ -876,11 +879,16 @@ static inline struct nvme_ns *nvme_get_ns_from_dev(struct device *dev)#ifdef CONFIG_NVME_HWMON int nvme_hwmon_init (struct nvme_ctrl *ctrl); +void nvme_hwmon_exit (struct nvme_ctrl *ctrl);#else static inline int nvme_hwmon_init (struct nvme_ctrl *ctrl) {return 0 ; } + +static inline void nvme_hwmon_exit (struct nvme_ctrl *ctrl) +{ +}#endif u32 nvme_command_effects(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
drivers/xen/gntdev-common.h +2 -1
@@ -44,9 +44,10 @@ struct gntdev_unmap_notify { };struct gntdev_grant_map { +atomic_t in_use;struct mmu_interval_notifier notifier; +bool notifier_init;struct list_head next; -struct vm_area_struct *vma;int index;int count;int flags;
drivers/xen/gntdev.c +27 -67
184 lines not on this page · raw message
fs/btrfs/backref.c +31 -15
115 lines not on this page · raw message
fs/cifs/cifsfs.c +5 -2
@@ -1221,8 +1221,11 @@ static ssize_t cifs_copy_file_range(struct file *src_file, loff_t off,ssize_t rc;struct cifsFileInfo *cfile = dst_file->private_data; -if (cfile->swapfile) -return -EOPNOTSUPP ; +if (cfile->swapfile) { + rc = -EOPNOTSUPP ; +free_xid (xid); +return rc; + } rc =cifs_file_copychunk_range (xid, src_file, off, dst_file, destoff, len, flags);
fs/cifs/file.c +7 -4
@@ -1735,11 +1735,13 @@ int cifs_flock(struct file *file, int cmd, struct file_lock *fl)struct cifsFileInfo *cfile;__u32 type; - rc = -EACCES ; xid =get_xid (); -if (!(fl->fl_flags &FL_FLOCK )) -return -ENOLCK ; +if (!(fl->fl_flags &FL_FLOCK )) { + rc = -ENOLCK ; +free_xid (xid); +return rc; + } cfile = (struct cifsFileInfo *)file->private_data; tcon =tlink_tcon (cfile->tlink);
@@ -1758,8 +1760,9 @@ int cifs_flock(struct file *file, int cmd, struct file_lock *fl)* if no lock or unlock then nothing to do since we do not * know what it is */ + rc = -EOPNOTSUPP ;free_xid (xid); -return -EOPNOTSUPP ; +return rc; } rc = cifs_setlk(file, fl, type, wait_flag, posix_lck, lock, unlock,
fs/cifs/sess.c +1 -0
@@ -306,6 +306,7 @@ cifs_ses_add_channel(struct cifs_ses *ses, struct cifs_server_iface *iface)cifs_put_tcp_session (chan->server,0 );unload_nls (vol.local_nls); +free_xid (xid);return rc; }
fs/fcntl.c +20 -12
@@ -148,12 +148,17 @@ void f_delown(struct file *filp)pid_t f_getown (struct file *filp) { -pid_t pid; -read_lock (&filp->f_owner.lock); - pid =pid_vnr (filp->f_owner.pid); -if (filp->f_owner.pid_type ==PIDTYPE_PGID ) - pid = -pid; -read_unlock (&filp->f_owner.lock); +pid_t pid =0 ; + +read_lock_irq (&filp->f_owner.lock); +rcu_read_lock (); +if (pid_task (filp->f_owner.pid, filp->f_owner.pid_type)) { + pid =pid_vnr (filp->f_owner.pid); +if (filp->f_owner.pid_type ==PIDTYPE_PGID ) + pid = -pid; + } +rcu_read_unlock (); +read_unlock_irq (&filp->f_owner.lock);return pid; }
@@ -200,11 +205,14 @@ static int f_setown_ex(struct file *filp, unsigned long arg)static int f_getown_ex (struct file *filp,unsigned long arg) {struct f_owner_ex __user *owner_p = (void __user *)arg; -struct f_owner_ex owner; +struct f_owner_ex owner = {};int ret =0 ; -read_lock (&filp->f_owner.lock); - owner.pid =pid_vnr (filp->f_owner.pid); +read_lock_irq (&filp->f_owner.lock); +rcu_read_lock (); +if (pid_task (filp->f_owner.pid, filp->f_owner.pid_type)) + owner.pid =pid_vnr (filp->f_owner.pid); +rcu_read_unlock ();switch (filp->f_owner.pid_type) {case PIDTYPE_PID : owner.type =F_OWNER_TID ;
@@ -223,7 +231,7 @@ static int f_getown_ex(struct file *filp, unsigned long arg) ret = -EINVAL ;break ; } -read_unlock (&filp->f_owner.lock); +read_unlock_irq (&filp->f_owner.lock);if (!ret) { ret =copy_to_user (owner_p, &owner,sizeof (owner));
@@ -241,10 +249,10 @@ static int f_getowner_uids(struct file *filp, unsigned long arg)uid_t src[2 ];int err; -read_lock (&filp->f_owner.lock); +read_lock_irq (&filp->f_owner.lock); src[0 ] =from_kuid (user_ns, filp->f_owner.uid); src[1 ] =from_kuid (user_ns, filp->f_owner.euid); -read_unlock (&filp->f_owner.lock); +read_unlock_irq (&filp->f_owner.lock); err =put_user (src[0 ], &dst[0 ]); err |=put_user (src[1 ], &dst[1 ]);
fs/ocfs2/namei.c +11 -12
@@ -231,6 +231,7 @@ static int ocfs2_mknod(struct inode *dir,handle_t *handle =NULL ;struct ocfs2_super *osb;struct ocfs2_dinode *dirfe; +struct ocfs2_dinode *fe =NULL ;struct buffer_head *new_fe_bh =NULL ;struct inode *inode =NULL ;struct ocfs2_alloc_context *inode_ac =NULL ;
@@ -381,6 +382,7 @@ static int ocfs2_mknod(struct inode *dir, goto leave; } + fe = (struct ocfs2_dinode *) new_fe_bh->b_data;if (S_ISDIR (mode)) { status =ocfs2_fill_new_dir (osb, handle, dir, inode, new_fe_bh, data_ac, meta_ac);
@@ -453,8 +455,11 @@ static int ocfs2_mknod(struct inode *dir, leave:if (status <0 && did_quota_inode)dquot_free_inode (inode); -if (handle) +if (handle) { +if (status <0 && fe) +ocfs2_set_links_count (fe,0 );ocfs2_commit_trans (osb, handle); + }ocfs2_inode_unlock (dir,1 );if (did_block_signals)
@@ -631,18 +636,9 @@ static int ocfs2_mknod_locked(struct ocfs2_super *osb,return status; } - status =__ocfs2_mknod_locked (dir, inode, dev, new_fe_bh, +return __ocfs2_mknod_locked (dir, inode, dev, new_fe_bh, parent_fe_bh, handle, inode_ac, fe_blkno, suballoc_loc, suballoc_bit); -if (status <0 ) { -u64 bg_blkno =ocfs2_which_suballoc_group (fe_blkno, suballoc_bit); -int tmp =ocfs2_free_suballoc_bits (handle, inode_ac->ac_inode, - inode_ac->ac_bh, suballoc_bit, bg_blkno,1 ); -if (tmp) -mlog_errno (tmp); - } - -return status; } static int ocfs2_mkdir(struct inode *dir,
@@ -2023,8 +2019,11 @@ static int ocfs2_symlink(struct inode *dir, ocfs2_clusters_to_bytes(osb->sb, 1));if (status <0 && did_quota_inode)dquot_free_inode (inode); -if (handle) +if (handle) { +if (status <0 && fe) +ocfs2_set_links_count (fe,0 );ocfs2_commit_trans (osb, handle); + }ocfs2_inode_unlock (dir,1 );if (did_block_signals)
fs/proc/task_mmu.c +1 -1
@@ -951,7 +951,7 @@ static int show_smaps_rollup(struct seq_file *m, void *v) vma = vma->vm_next; } -show_vma_header_prefix (m, priv->mm->mmap->vm_start, +show_vma_header_prefix (m, priv->mm->mmap ? priv->mm->mmap->vm_start :0 , last_vma_end,0 ,0 ,0 ,0 );seq_pad (m,' ' );seq_puts (m,"[rollup]\n" );
include/linux/kvm_host.h +2 -0
@@ -911,6 +911,8 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm, struct kvm_enable_cap *cap);long kvm_arch_vm_ioctl (struct file *filp,unsigned int ioctl,unsigned long arg); +long kvm_arch_vm_compat_ioctl (struct file *filp,unsigned int ioctl, +unsigned long arg);int kvm_arch_vcpu_ioctl_get_fpu (struct kvm_vcpu *vcpu,struct kvm_fpu *fpu);int kvm_arch_vcpu_ioctl_set_fpu (struct kvm_vcpu *vcpu,struct kvm_fpu *fpu);
include/linux/mmc/card.h +1 -0
@@ -270,6 +270,7 @@ struct mmc_card {#define MMC_QUIRK_BROKEN_IRQ_POLLING (1<<11)/* Polling SDIO_CCCR_INTx could create a fake interrupt */ #define MMC_QUIRK_TRIM_BROKEN (1<<12)/* Skip trim */ #define MMC_QUIRK_BROKEN_HPI (1<<13)/* Disable broken HPI support */ +#define MMC_QUIRK_BROKEN_SD_DISCARD (1<<14)/* Disable broken SD discard support */ bool reenable_cmdq;/* Re-enable Command Queue */
include/net/sch_generic.h +0 -1
@@ -1178,7 +1178,6 @@ static inline void __qdisc_reset_queue(struct qdisc_skb_head *qh)static inline void qdisc_reset_queue (struct Qdisc *sch) {__qdisc_reset_queue (&sch->q); - sch->qstats.backlog =0 ; } static inline struct Qdisc *qdisc_replace(struct Qdisc *sch, struct Qdisc *new,
include/net/sock_reuseport.h +5 -6
@@ -38,21 +38,20 @@ extern struct sock *reuseport_select_sock(struct sock *sk,extern int reuseport_attach_prog (struct sock *sk,struct bpf_prog *prog);extern int reuseport_detach_prog (struct sock *sk); -static inline bool reuseport_has_conns (struct sock *sk,bool set) +static inline bool reuseport_has_conns (struct sock *sk) {struct sock_reuseport *reuse;bool ret = false;rcu_read_lock (); reuse =rcu_dereference (sk->sk_reuseport_cb); -if (reuse) { -if (set) - reuse->has_conns =1 ; - ret = reuse->has_conns; - } +if (reuse && reuse->has_conns) + ret = true;rcu_read_unlock ();return ret; } +void reuseport_has_conns_set (struct sock *sk); +#endif /* _SOCK_REUSEPORT_H */
kernel/trace/trace.c +6 -6
@@ -6008,12 +6008,12 @@ int tracing_set_tracer(struct trace_array *tr, const char *buf)if (tr->current_trace->reset) tr->current_trace->reset (tr); +#ifdef CONFIG_TRACER_MAX_TRACE + had_max_tr = tr->current_trace->use_max_tr; +/* Current trace needs to be nop_trace before synchronize_rcu */ tr->current_trace = &nop_trace; -#ifdef CONFIG_TRACER_MAX_TRACE - had_max_tr = tr->allocated_snapshot; -if (had_max_tr && !t->use_max_tr) {/* * We need to make sure that the update_max_tr sees that
@@ -6025,14 +6025,14 @@ int tracing_set_tracer(struct trace_array *tr, const char *buf)synchronize_rcu (); free_snapshot(tr); } -#endif -#ifdef CONFIG_TRACER_MAX_TRACE -if (t->use_max_tr && !had_max_tr) { +if (t->use_max_tr && !tr->allocated_snapshot) { ret =tracing_alloc_snapshot_instance (tr);if (ret <0 ) goto out; } +#else + tr->current_trace = &nop_trace;#endif if (t->init) {
net/atm/mpoa_proc.c +2 -1
@@ -219,11 +219,12 @@ static ssize_t proc_mpc_write(struct file *file, const char __user *buff,if (!page)return -ENOMEM ; -for (p = page, len =0 ; len < nbytes; p++, len++) { +for (p = page, len =0 ; len < nbytes; p++) {if (get_user (*p, buff++)) {free_page ((unsigned long )page);return -EFAULT ; } + len +=1 ;if (*p =='\0' || *p =='\n' )break ; }
net/core/sock_reuseport.c +16 -0
@@ -18,6 +18,22 @@ DEFINE_SPINLOCK(reuseport_lock);static DEFINE_IDA (reuseport_ida); +void reuseport_has_conns_set (struct sock *sk) +{ +struct sock_reuseport *reuse; + +if (!rcu_access_pointer (sk->sk_reuseport_cb)) +return ; + +spin_lock_bh (&reuseport_lock); + reuse =rcu_dereference_protected (sk->sk_reuseport_cb, +lockdep_is_held (&reuseport_lock)); +if (likely (reuse)) + reuse->has_conns =1 ; +spin_unlock_bh (&reuseport_lock); +} +EXPORT_SYMBOL (reuseport_has_conns_set); +static struct sock_reuseport *__reuseport_alloc (unsigned int max_socks) { unsigned int size = sizeof(struct sock_reuseport) +
net/hsr/hsr_forward.c +6 -6
@@ -108,15 +108,15 @@ struct sk_buff *hsr_get_untagged_frame(struct hsr_frame_info *frame, struct hsr_port *port) {if (!frame->skb_std) { -if (frame->skb_hsr) { +if (frame->skb_hsr) frame->skb_std =create_stripped_skb_hsr (frame->skb_hsr, frame); - }else { -/* Unexpected */ -WARN_ONCE (1 ,"%s:%d: Unexpected frame received (port_src %s)\n" , - __FILE__, __LINE__, port->dev->name); +else +netdev_warn_once (port->dev, +"Unexpected frame received in hsr_get_untagged_frame()\n" ); + +if (!frame->skb_std)return NULL ; - } }return skb_clone (frame->skb_std,GFP_ATOMIC );
net/ipv4/datagram.c +1 -1
@@ -70,7 +70,7 @@ int __ip4_datagram_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len } inet->inet_daddr = fl4->daddr; inet->inet_dport = usin->sin_port; -reuseport_has_conns (sk, true); +reuseport_has_conns_set (sk); sk->sk_state =TCP_ESTABLISHED ;sk_set_txhash (sk); inet->inet_id =prandom_u32 ();
net/ipv4/udp.c +1 -1
@@ -446,7 +446,7 @@ static struct sock *udp4_lib_lookup2(struct net *net, result =lookup_reuseport (net, sk, skb, saddr, sport, daddr, hnum);/* Fall back to scoring if group has connections */ -if (result && !reuseport_has_conns (sk, false)) +if (result && !reuseport_has_conns (sk))return result; result = result ? : sk;
net/ipv6/datagram.c +1 -1
@@ -256,7 +256,7 @@ int __ip6_datagram_connect(struct sock *sk, struct sockaddr *uaddr, goto out; } -reuseport_has_conns (sk, true); +reuseport_has_conns_set (sk); sk->sk_state =TCP_ESTABLISHED ;sk_set_txhash (sk); out:
net/ipv6/udp.c +1 -1
@@ -179,7 +179,7 @@ static struct sock *udp6_lib_lookup2(struct net *net, result =lookup_reuseport (net, sk, skb, saddr, sport, daddr, hnum);/* Fall back to scoring if group has connections */ -if (result && !reuseport_has_conns (sk, false)) +if (result && !reuseport_has_conns (sk))return result; result = result ? : sk;
net/sched/sch_api.c +3 -2
@@ -1081,12 +1081,13 @@ static int qdisc_graft(struct net_device *dev, struct Qdisc *parent, skip:if (!ingress) { -notify_and_destroy (net, skb, n, classid, -rtnl_dereference (dev->qdisc), new); + old =rtnl_dereference (dev->qdisc);if (new && !new->ops->attach)qdisc_refcount_inc (new);rcu_assign_pointer (dev->qdisc, new ? : &noop_qdisc); +notify_and_destroy (net, skb, n, classid, old, new); +if (new && new->ops->attach) new->ops->attach (new); }else {
net/sched/sch_atm.c +0 -1
@@ -575,7 +575,6 @@ static void atm_tc_reset(struct Qdisc *sch)pr_debug ("atm_tc_reset(sch %p,[qdisc %p])\n" , sch, p);list_for_each_entry (flow, &p->flows, list)qdisc_reset (flow->q); - sch->q.qlen =0 ; }static void atm_tc_destroy (struct Qdisc *sch)
net/sched/sch_cake.c +4 -0
@@ -2224,8 +2224,12 @@ static struct sk_buff *cake_dequeue(struct Qdisc *sch)static void cake_reset (struct Qdisc *sch) { +struct cake_sched_data *q =qdisc_priv (sch);u32 c; +if (!q->tins) +return ; +for (c =0 ; c <CAKE_MAX_TINS ; c++)cake_clear_tin (sch, c); }
net/sched/sch_cbq.c +0 -1
@@ -1053,7 +1053,6 @@ cbq_reset(struct Qdisc *sch) cl->cpriority = cl->priority; } } - sch->q.qlen =0 ; }
net/sched/sch_choke.c +0 -2
@@ -315,8 +315,6 @@ static void choke_reset(struct Qdisc *sch)rtnl_qdisc_drop (skb, sch); } - sch->q.qlen =0 ; - sch->qstats.backlog =0 ;if (q->tab)memset (q->tab,0 , (q->tab_mask +1 ) *sizeof (struct sk_buff *)); q->head = q->tail =0 ;
net/sched/sch_drr.c +0 -2
@@ -443,8 +443,6 @@ static void drr_reset_qdisc(struct Qdisc *sch)qdisc_reset (cl->qdisc); } } - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void drr_destroy_qdisc (struct Qdisc *sch)
net/sched/sch_dsmark.c +0 -2
@@ -408,8 +408,6 @@ static void dsmark_reset(struct Qdisc *sch)pr_debug ("%s(sch %p,[qdisc %p])\n" , __func__, sch, p);if (p->q)qdisc_reset (p->q); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void dsmark_destroy (struct Qdisc *sch)
net/sched/sch_etf.c +0 -3
@@ -445,9 +445,6 @@ static void etf_reset(struct Qdisc *sch)timesortedlist_clear (sch);__qdisc_reset_queue (&sch->q); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; - q->last =0 ; }
net/sched/sch_ets.c +0 -2
@@ -722,8 +722,6 @@ static void ets_qdisc_reset(struct Qdisc *sch) }for (band =0 ; band < q->nbands; band++)qdisc_reset (q->classes[band].qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void ets_qdisc_destroy (struct Qdisc *sch)
net/sched/sch_fq_codel.c +0 -2
@@ -347,8 +347,6 @@ static void fq_codel_reset(struct Qdisc *sch)codel_vars_init (&flow->cvars); }memset (q->backlogs,0 , q->flows_cnt *sizeof (u32)); - sch->q.qlen =0 ; - sch->qstats.backlog =0 ; q->memory_usage =0 ; }
net/sched/sch_fq_pie.c +0 -3
@@ -521,9 +521,6 @@ static void fq_pie_reset(struct Qdisc *sch)INIT_LIST_HEAD (&flow->flowchain);pie_vars_init (&flow->vars); } - - sch->q.qlen =0 ; - sch->qstats.backlog =0 ; }static void fq_pie_destroy (struct Qdisc *sch)
net/sched/sch_hfsc.c +0 -2
@@ -1484,8 +1484,6 @@ hfsc_reset_qdisc(struct Qdisc *sch) } q->eligible =RB_ROOT ;qdisc_watchdog_cancel (&q->watchdog); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; } static void
net/sched/sch_htb.c +0 -2
@@ -966,8 +966,6 @@ static void htb_reset(struct Qdisc *sch) }qdisc_watchdog_cancel (&q->watchdog);__qdisc_reset_queue (&q->direct_queue); - sch->q.qlen =0 ; - sch->qstats.backlog =0 ;memset (q->hlevel,0 ,sizeof (q->hlevel));memset (q->row_mask,0 ,sizeof (q->row_mask)); }
net/sched/sch_multiq.c +0 -1
@@ -152,7 +152,6 @@ multiq_reset(struct Qdisc *sch)for (band =0 ; band < q->bands; band++)qdisc_reset (q->queues[band]); - sch->q.qlen =0 ; q->curband =0 ; }
net/sched/sch_prio.c +0 -2
@@ -135,8 +135,6 @@ prio_reset(struct Qdisc *sch)for (prio =0 ; prio < q->bands; prio++)qdisc_reset (q->queues[prio]); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static int prio_offload (struct Qdisc *sch,struct tc_prio_qopt *qopt)
net/sched/sch_qfq.c +0 -2
@@ -1458,8 +1458,6 @@ static void qfq_reset_qdisc(struct Qdisc *sch)qdisc_reset (cl->qdisc); } } - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void qfq_destroy_qdisc (struct Qdisc *sch)
net/sched/sch_red.c +0 -2
@@ -176,8 +176,6 @@ static void red_reset(struct Qdisc *sch)struct red_sched_data *q =qdisc_priv (sch);qdisc_reset (q->qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ;red_restart (&q->vars); }
net/sched/sch_sfb.c +2 -3
@@ -455,9 +455,8 @@ static void sfb_reset(struct Qdisc *sch) {struct sfb_sched_data *q =qdisc_priv (sch); -qdisc_reset (q->qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; +if (likely (q->qdisc)) +qdisc_reset (q->qdisc); q->slot =0 ; q->double_buffering = false;sfb_zero_all_buckets (q);
net/sched/sch_skbprio.c +0 -3
@@ -213,9 +213,6 @@ static void skbprio_reset(struct Qdisc *sch)struct skbprio_sched_data *q =qdisc_priv (sch);int prio; - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; -for (prio =0 ; prio <SKBPRIO_MAX_PRIORITY ; prio++)__skb_queue_purge (&q->qdiscs[prio]);
net/sched/sch_taprio.c +0 -2
@@ -1626,8 +1626,6 @@ static void taprio_reset(struct Qdisc *sch)if (q->qdiscs[i])qdisc_reset (q->qdiscs[i]); } - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; }static void taprio_destroy (struct Qdisc *sch)
net/sched/sch_tbf.c +0 -2
@@ -316,8 +316,6 @@ static void tbf_reset(struct Qdisc *sch)struct tbf_sched_data *q =qdisc_priv (sch);qdisc_reset (q->qdisc); - sch->qstats.backlog =0 ; - sch->q.qlen =0 ; q->t_c =ktime_get_ns (); q->tokens = q->buffer; q->ptokens = q->mtu;
net/sched/sch_teql.c +0 -1
@@ -124,7 +124,6 @@ teql_reset(struct Qdisc *sch)struct teql_sched_data *dat =qdisc_priv (sch);skb_queue_purge (&dat->q); - sch->q.qlen =0 ; } static void
net/tipc/discover.c +1 -1
@@ -147,8 +147,8 @@ static bool tipc_disc_addr_trial_msg(struct tipc_discoverer *d, {struct net *net = d->net;struct tipc_net *tn =tipc_net (net); -bool trial =time_before (jiffies, tn->addr_trial_end);u32 self =tipc_own_addr (net); +bool trial =time_before (jiffies, tn->addr_trial_end) && !self;if (mtyp ==DSC_TRIAL_FAIL_MSG ) {if (!trial)
net/tipc/topsrv.c +1 -1
@@ -568,7 +568,7 @@ bool tipc_topsrv_kern_subscr(struct net *net, u32 port, u32 type, u32 lower, sub.seq.upper = upper; sub.timeout =TIPC_WAIT_FOREVER ; sub.filter = filter; - *(u32 *)&sub.usr_handle = port; + *(u64 *)&sub.usr_handle = (u64 )port; con =tipc_conn_alloc (tipc_topsrv (net));if (IS_ERR (con))
security/selinux/ss/services.c +3 -2
@@ -2011,7 +2011,8 @@ static inline int convert_context_handle_invalid_context(* in `newc'. Verify that the context is valid * under the new policy. */ -static int convert_context (struct context *oldc,struct context *newc,void *p) +static int convert_context (struct context *oldc,struct context *newc,void *p, +gfp_t gfp_flags) {struct convert_context_args *args;struct ocontext *oc;
@@ -2025,7 +2026,7 @@ static int convert_context(struct context *oldc, struct context *newc, void *p) args = p;if (oldc->str) { - s =kstrdup (oldc->str,GFP_KERNEL ); + s =kstrdup (oldc->str, gfp_flags);if (!s)return -ENOMEM ;
security/selinux/ss/sidtab.c +2 -2
@@ -325,7 +325,7 @@ int sidtab_context_to_sid(struct sidtab *s, struct context *context, } rc = convert->func (context, &dst_convert->context, - convert->args); + convert->args,GFP_ATOMIC );if (rc) {context_destroy (&dst->context); goto out_unlock;
@@ -404,7 +404,7 @@ static int sidtab_convert_tree(union sidtab_entry_inner *edst,while (i <SIDTAB_LEAF_ENTRIES && *pos < count) { rc = convert->func (&esrc->ptr_leaf->entries[i].context, &edst->ptr_leaf->entries[i].context, - convert->args); + convert->args,GFP_KERNEL );if (rc)return rc; (*pos)++;
security/selinux/ss/sidtab.h +1 -1
@@ -65,7 +65,7 @@ struct sidtab_isid_entry { };struct sidtab_convert_params { -int (*func)(struct context *oldc,struct context *newc,void *args); +int (*func)(struct context *oldc,struct context *newc,void *args,gfp_t gfp_flags);void *args;struct sidtab *target; };
tools/perf/util/parse-events.c +6 -0
@@ -356,6 +356,12 @@ __add_event(struct list_head *list, int *idx,struct perf_cpu_map *cpus = pmu ?perf_cpu_map__get (pmu->cpus) : cpu_list ?perf_cpu_map__new (cpu_list) :NULL ; +if (pmu) +perf_pmu__warn_invalid_formats (pmu); + +if (pmu && attr->type ==PERF_TYPE_RAW ) +perf_pmu__warn_invalid_config (pmu, attr->config, name); +if (init_attr)event_attr_init (attr);
tools/perf/util/pmu.c +50 -0
59 lines not on this page · raw message
tools/perf/util/pmu.h +5 -0
@@ -15,6 +15,7 @@ enum {PERF_PMU_FORMAT_VALUE_CONFIG ,PERF_PMU_FORMAT_VALUE_CONFIG1 ,PERF_PMU_FORMAT_VALUE_CONFIG2 , + PERF_PMU_FORMAT_VALUE_CONFIG_END, };#define PERF_PMU_FORMAT_BITS 64
@@ -120,4 +121,8 @@ int perf_pmu__convert_scale(const char *scale, char **end, double *sval);int perf_pmu__caps_parse (struct perf_pmu *pmu); +void perf_pmu__warn_invalid_config (struct perf_pmu *pmu,__u64 config, +char *name); +void perf_pmu__warn_invalid_formats (struct perf_pmu *pmu); +#endif /* __PMU_H */
tools/perf/util/pmu.l +0 -2
@@ -27,8 +27,6 @@ num_dec [0-9]+ {num_dec} { return value(10); } config { return PP_CONFIG; } -config1 { return PP_CONFIG1; } -config2 { return PP_CONFIG2; } - { return '-'; } : { return ':'; } , { return ','; }
tools/perf/util/pmu.y +4 -11
@@ -20,7 +20,7 @@ do { \ %} -%token PP_CONFIG PP_CONFIG1 PP_CONFIG2 +%token PP_CONFIG %token PP_VALUE PP_ERROR %type <num> PP_VALUE %type <bits> bit_term
@@ -47,18 +47,11 @@ PP_CONFIG ':' bits $3)); } | -PP_CONFIG1 ':' bits +PP_CONFIG PP_VALUE ':' bits { ABORT_ON(perf_pmu__new_format(format, name, - PERF_PMU_FORMAT_VALUE_CONFIG1, - $3)); -} -| -PP_CONFIG2 ':' bits -{ - ABORT_ON(perf_pmu__new_format(format, name, - PERF_PMU_FORMAT_VALUE_CONFIG2, - $3)); + $2, + $4)); } bits:
virt/kvm/kvm_main.c +11 -0
@@ -3966,6 +3966,12 @@ struct compat_kvm_clear_dirty_log { }; }; +long __weak kvm_arch_vm_compat_ioctl (struct file *filp,unsigned int ioctl, +unsigned long arg) +{ +return -ENOTTY ; +} +static long kvm_vm_compat_ioctl (struct file *filp,unsigned int ioctl,unsigned long arg) {
@@ -3974,6 +3980,11 @@ static long kvm_vm_compat_ioctl(struct file *filp,if (kvm->mm != current->mm || kvm->vm_bugged)return -EIO ; + + r =kvm_arch_vm_compat_ioctl (filp, ioctl, arg); +if (r != -ENOTTY ) +return r; +switch (ioctl) {#ifdef CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT case KVM_CLEAR_DIRTY_LOG : {