Linux 6.6.67
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.67 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/power/runtime_pm.rst | 4 Makefile | 2 arch/arm64/kvm/sys_regs.c | 52 + arch/riscv/include/asm/kfence.h | 4 arch/riscv/kernel/setup.c | 2 arch/x86/events/intel/ds.c | 2 arch/x86/include/asm/processor.h | 2 arch/x86/include/asm/static_call.h | 15 arch/x86/include/asm/sync_core.h | 6 arch/x86/include/asm/xen/hypercall.h | 36 - arch/x86/kernel/callthunks.c | 5 arch/x86/kernel/cpu/common.c | 38 - arch/x86/kernel/static_call.c | 9 arch/x86/xen/enlighten.c | 65 + arch/x86/xen/enlighten_hvm.c | 13 arch/x86/xen/enlighten_pv.c | 4 arch/x86/xen/enlighten_pvh.c | 7 arch/x86/xen/xen-asm.S | 50 + arch/x86/xen/xen-head.S | 106 ++- arch/x86/xen/xen-ops.h | 9 block/blk-cgroup.c | 6 block/blk-iocost.c | 9 drivers/acpi/acpica/evxfregn.c | 2 drivers/acpi/nfit/core.c | 7 drivers/acpi/resource.c | 6 drivers/ata/sata_highbank.c | 1 drivers/bluetooth/btmtk.c | 20 drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c | 2 drivers/gpu/drm/i915/i915_gpu_error.c | 18 drivers/gpu/drm/i915/i915_scheduler.c | 2 drivers/net/bonding/bond_main.c | 1 drivers/net/dsa/microchip/ksz_common.c | 42 - drivers/net/dsa/ocelot/felix_vsc9959.c | 17 drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 2 drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 2 drivers/net/ethernet/chelsio/cxgb4/t4_hw.c | 5 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c | 4 drivers/net/ethernet/microchip/sparx5/sparx5_main.c | 11 drivers/net/ethernet/microchip/sparx5/sparx5_port.c | 2 drivers/net/ethernet/mscc/ocelot_ptp.c | 209 +++--- drivers/net/ethernet/qualcomm/qca_spi.c | 26 drivers/net/ethernet/qualcomm/qca_spi.h | 1 drivers/net/ethernet/renesas/rswitch.c | 373 ++++++----- drivers/net/ethernet/renesas/rswitch.h | 48 - drivers/net/team/team.c | 3 drivers/net/xen-netfront.c | 5 drivers/ptp/ptp_kvm_x86.c | 6 drivers/spi/spi-aspeed-smc.c | 10 drivers/ufs/core/ufshcd.c | 1 drivers/usb/dwc2/hcd.c | 19 drivers/usb/dwc3/dwc3-xilinx.c | 5 drivers/usb/gadget/function/f_midi2.c | 6 drivers/usb/gadget/function/u_serial.c | 9 drivers/usb/host/ehci-sh.c | 9 drivers/usb/host/max3421-hcd.c | 16 drivers/usb/typec/anx7411.c | 66 + fs/smb/server/auth.c | 2 fs/smb/server/mgmt/user_session.c | 6 fs/smb/server/server.c | 4 fs/smb/server/smb2pdu.c | 27 fs/xfs/libxfs/xfs_btree.c | 29 fs/xfs/libxfs/xfs_symlink_remote.c | 4 fs/xfs/scrub/trace.h | 2 fs/xfs/xfs_file.c | 8 fs/xfs/xfs_trans.c | 16 include/linux/bpf.h | 13 include/linux/compiler.h | 37 - include/linux/dsa/ocelot.h | 1 include/linux/static_call.h | 6 include/net/bluetooth/bluetooth.h | 1 include/net/bluetooth/hci_core.h | 24 include/net/lapb.h | 2 include/net/net_namespace.h | 1 include/net/netfilter/nf_tables.h | 4 include/soc/mscc/ocelot.h | 2 kernel/bpf/btf.c | 6 kernel/bpf/verifier.c | 5 kernel/static_call_inline.c | 2 kernel/trace/bpf_trace.c | 11 kernel/trace/trace_kprobe.c | 2 kernel/trace/trace_uprobe.c | 6 net/batman-adv/translation-table.c | 58 + net/bluetooth/hci_conn.c | 32 net/bluetooth/hci_event.c | 33 net/bluetooth/iso.c | 87 ++ net/bluetooth/sco.c | 29 net/core/net_namespace.c | 20 net/core/sock_map.c | 6 net/ipv4/tcp_output.c | 6 net/mac80211/cfg.c | 11 net/netfilter/nf_tables_api.c | 32 net/netfilter/xt_IDLETIMER.c | 52 - net/sched/sch_netem.c | 22 net/tipc/udp_media.c | 7 net/unix/af_unix.c | 1 net/wireless/nl80211.c | 2 net/wireless/sme.c | 1 sound/core/control_led.c | 14 sound/soc/amd/yc/acp6x-mach.c | 13 sound/usb/quirks.c | 44 - tools/objtool/check.c | 9 tools/testing/selftests/arm64/abi/syscall-abi-asm.S | 32 tools/testing/selftests/bpf/Makefile | 19 tools/testing/selftests/bpf/netlink_helpers.c | 358 ++++++++++ tools/testing/selftests/bpf/netlink_helpers.h | 46 + tools/testing/selftests/bpf/progs/verifier_btf_ctx_access.c | 4 tools/testing/selftests/bpf/progs/verifier_d_path.c | 4 tools/testing/selftests/bpf/progs/verifier_scalar_ids.c | 16 tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh | 55 + tools/tracing/rtla/src/timerlat_hist.c | 12 110 files changed, 1909 insertions(+), 739 deletions(-)
Alexandre Ghiti (2):
riscv: Fix wrong usage of __pa() on a fixmap address
riscv: Fix IPIs usage in kfence_protect_page()
Anumula Murali Mohan Reddy (1):
cxgb4: use port number to set mac addr
Benjamin Lin (1):
wifi: mac80211: fix station NSS capability initialization order
Christophe JAILLET (1):
spi: aspeed: Fix an error handling path in aspeed_spi_[read|write]_user()
Dan Carpenter (2):
net/mlx5: DR, prevent potential error pointer dereference
ALSA: usb-audio: Fix a DMA to stack memory bug
Daniel Borkmann (3):
bonding: Fix feature propagation of NETIF_F_GSO_ENCAP_ALL
team: Fix feature propagation of NETIF_F_GSO_ENCAP_ALL selftests/bpf: Add netlink helper library
Daniel Machon (2):
net: sparx5: fix FDMA performance issue
net: sparx5: fix the maximum frame length register
Danielle Ratson (3):
selftests: mlxsw: sharedbuffer: Remove h1 ingress test case
selftests: mlxsw: sharedbuffer: Remove duplicate test cases
selftests: mlxsw: sharedbuffer: Ensure no extra packets are counted
Daniil Tatianin (1):
ACPICA: events/evxfregn: don't release the ContextMutex that was never acquired
Darrick J. Wong (5):
xfs: update btree keys correctly when _insrec splits an inode root block
xfs: don't drop errno values when we fail to ficlone the entire range
xfs: return from xfs_symlink_verify early on V4 filesystems
xfs: fix scrub tracepoints when inode-rooted btrees are involved
xfs: only run precommits once per transaction object
David (Ming Qiang) Wu (1):
amdgpu/uvd: get ring reference from rq scheduler
Eduard Zingerman (1):
bpf: sync_linked_regs() must preserve subreg_def
Eric Dumazet (3):
tipc: fix NULL deref in cleanup_bearer()
net: lapb: increase LAPB_HEADER_LEN
net: defer final 'struct net' free in netns dismantle
Eugene Kobyak (1):
drm/i915: Fix NULL pointer dereference in capture_engine
Florian Westphal (1):
netfilter: nf_tables: do not defer rule destruction via call_rcu
Frederik Deweerdt (1):
splice: do not checksum AF_UNIX sockets
Frédéric Danis (1):
Bluetooth: SCO: Add support for 16 bits transparent voice setting
Greg Kroah-Hartman (1):
Linux 6.6.67
Haoyu Li (2):
wifi: mac80211: init cnt before accessing elem in ieee80211_copy_mbssid_beacon
wifi: cfg80211: sme: init n_channels before channels[] access
Ilpo Järvinen (1):
ACPI: resource: Fix memory resource type union access
Iulia Tanasescu (2):
Bluetooth: ISO: Reassociate a socket with an active BIS
Bluetooth: iso: Fix recursive locking warning
Jaakko Salo (1):
ALSA: usb-audio: Add implicit feedback quirk for Yamaha THR5
James Morse (1):
KVM: arm64: Disable MPAM visibility by default and ignore VMM writes
Jann Horn (2):
bpf: Fix UAF via mismatching bpf_prog/attachment RCU flavors
bpf: Fix theoretical prog_array UAF in __uprobe_perf_func()
Jesse Van Gavere (1):
net: dsa: microchip: KSZ9896 register regmap alignment to 32 bit boundaries
Jiasheng Jiang (1):
drm/i915: Fix memory leak by correcting cache object name in error handler
Jiri Olsa (1):
bpf,perf: Fix invalid prog_array access in perf_event_detach_bpf_prog
Joe Hattori (3):
ata: sata_highbank: fix OF node reference leak in highbank_initialize_phys()
usb: typec: anx7411: fix fwnode_handle reference leak
usb: typec: anx7411: fix OF node reference leaks in anx7411_typec_switch_probe()
Johannes Berg (1):
wifi: mac80211: clean up 'ret' in sta_link_apply_parameters()
Juergen Gross (9):
xen/netfront: fix crash when removing device
x86: make get_cpu_vendor() accessible from Xen code objtool/x86: allow syscall instruction
x86/static-call: provide a way to do very early static-call updates x86/xen: don't do PV iret hypercall through hypercall page x86/xen: add central hypercall functions
x86/xen: use new hypercall functions instead of hypercall page x86/xen: remove hypercall page
x86/static-call: fix 32-bit build
Kan Liang (1):
perf/x86/intel/ds: Unconditionally drain PEBS DS when changing PEBS_DATA_CFG
Kumar Kartikeya Dwivedi (1):
bpf: Check size for BTF-based ctx access of pointer members
Lianqin Hu (1):
usb: gadget: u_serial: Fix the issue that gs_start_io crashed due to accessing null pointer
Lin Ma (1):
wifi: nl80211: fix NL80211_ATTR_MLO_LINK_ID off-by-one
Luiz Augusto von Dentz (1):
Bluetooth: hci_event: Fix using rcu_read_(un)lock while iterating
Mark Tomlinson (1):
usb: host: max3421-hcd: Correctly abort a USB request.
Martin Ottens (1):
net/sched: netem: account for backlog updates from child qdisc
Michal Luczaj (2):
bpf, sockmap: Fix race between element replace and close() bpf, sockmap: Fix update element with same
MoYuanhao (1):
tcp: check space before adding MPTCP SYN options
Namjae Jeon (1):
ksmbd: fix racy issue from session lookup and expire
Nathan Chancellor (1):
blk-iocost: Avoid using clamp() on inuse in __propagate_weights()
Neal Frager (1):
usb: dwc3: xilinx: make sure pipe clock is deselected in usb2 only mode
Nikita Yushchenko (5):
net: renesas: rswitch: fix race window between tx start and complete
net: renesas: rswitch: fix leaked pointer on error path
net: renesas: rswitch: avoid use-after-put for a device tree node
net: renesas: rswitch: handle stop vs interrupt race
net: renesas: rswitch: fix initial MPIC register setting
Nikolay Kuratov (1):
tracing/kprobes: Skip symbol counting logic for module symbols in create_local_trace_kprobe()
Paul Barker (1):
Documentation: PM: Clarify pm_runtime_resume_and_get() return value
Phil Sutter (1):
netfilter: IDLETIMER: Fix for possible ABBA deadlock
Radu Rendec (1):
net: rswitch: Avoid use-after-free in rswitch_poll()
Remi Pommarel (3):
batman-adv: Do not send uninitialized TT changes
batman-adv: Remove uninitialized data in full table TT response
batman-adv: Do not let TT changes list grows indefinitely
Shung-Hsi Yu (1):
selftests/bpf: remove use of __xlated()
Stefan Wahren (5):
usb: dwc2: Fix HCD resume
usb: dwc2: hcd: Fix GetPortStatus & SetPortFeature
usb: dwc2: Fix HCD port connection race
qca_spi: Fix clock speed for multiple QCA7000
qca_spi: Make driver probing reliable
Suraj Sonawane (1):
acpi: nfit: vmalloc-out-of-bounds Read in acpi_nfit_ctl
Takashi Iwai (2):
usb: gadget: midi2: Fix interpretation of is_midi1 bits
ALSA: control: Avoid WARN() for symlink errors
Tejun Heo (1):
blk-cgroup: Fix UAF in blkcg_unpin_online()
Thadeu Lima de Souza Cascardo (1):
Bluetooth: btmtk: avoid UAF in btmtk_process_coredump
Thomas Weißschuh (1):
ptp: kvm: x86: Return EOPNOTSUPP instead of ENODEV from kvm_arch_ptp_init()
Tomas Glozar (1):
rtla/timerlat: Make timerlat_hist_cpu->*_count unsigned long long
Venkata Prasad Potturu (1):
ASoC: amd: yc: Fix the wrong return value
Vitalii Mordan (1):
usb: ehci-hcd: fix call balance of clocks handling routines
Vladimir Oltean (6):
net: mscc: ocelot: fix memory leak on ocelot_port_add_txtstamp_skb()
net: mscc: ocelot: improve handling of TX timestamp for unknown skb
net: mscc: ocelot: ocelot->ts_id_lock and ocelot_port->tx_skbs.lock are IRQ-safe
net: mscc: ocelot: be resilient to loss of PTP packets during transmission
net: mscc: ocelot: perform error cleanup in ocelot_hwstamp_set()
net: dsa: felix: fix stuck CPU-injected packets with short taprio windows
Weizhao Ouyang (1):
kselftest/arm64: abi: fix SVCR detection
Yoshihiro Shimoda (6):
net: rswitch: Drop unused argument/return value
net: rswitch: Use unsigned int for desc related array index
net: rswitch: Use build_skb() for RX
net: rswitch: Add unmap_addrs instead of dma address in each desc
net: rswitch: Add a setting ext descriptor function
net: rswitch: Add jumbo frames handling for TX
liuderong (1):
scsi: ufs: core: Update compl_time_stamp_local_clock after completing a cqe
Greg Kroah-Hartman
maintainerDocumentation/power/runtime_pm.rst +3 -1
@@ -347,7 +347,9 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h: `int pm_runtime_resume_and_get(struct device *dev);` - run pm_runtime_resume(dev) and if successful, increment the device's - usage counter; return the result of pm_runtime_resume + usage counter; returns 0 on success (whether or not the device's + runtime PM status was already 'active') or the error code from + pm_runtime_resume() on failure. `int pm_request_idle(struct device *dev);` - submit a request to execute the subsystem-level idle callback for the
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 66 +SUBLEVEL = 67 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/arm64/kvm/sys_regs.c +50 -2
78 lines not on this page · raw message
arch/riscv/include/asm/kfence.h +3 -1
@@ -22,7 +22,9 @@ static inline bool kfence_protect_page(unsigned long addr, bool protect)else set_pte (pte,__pte (pte_val (ptep_get (pte)) | _PAGE_PRESENT)); -flush_tlb_kernel_range (addr, addr +PAGE_SIZE ); +preempt_disable (); +local_flush_tlb_kernel_range (addr, addr +PAGE_SIZE ); +preempt_enable ();return true; }
arch/riscv/kernel/setup.c +1 -1
@@ -246,7 +246,7 @@ static void __init init_resources(void)static void __init parse_dtb (void ) {/* Early scan of device tree from init memory */ -if (early_init_dt_scan (dtb_early_va,__pa (dtb_early_va))) { +if (early_init_dt_scan (dtb_early_va, dtb_early_pa)) {const char *name =of_flat_dt_get_machine_name ();if (name) {
arch/x86/events/intel/ds.c +1 -1
@@ -1354,7 +1354,7 @@ void intel_pmu_pebs_enable(struct perf_event *event)* hence we need to drain when changing said * size. */ -intel_pmu_drain_large_pebs (cpuc); +intel_pmu_drain_pebs_buffer ();adaptive_pebs_record_size_update ();wrmsrl (MSR_PEBS_DATA_CFG , pebs_data_cfg); cpuc->active_pebs_data_cfg = pebs_data_cfg;
arch/x86/include/asm/processor.h +2 -0
@@ -190,6 +190,8 @@ static inline unsigned long long l1tf_pfn_limit(void)return BIT_ULL (boot_cpu_data.x86_cache_bits -1 -PAGE_SHIFT ); } +void init_cpu_devs (void ); +void get_cpu_vendor (struct cpuinfo_x86 *c);extern void early_cpu_init (void );extern void identify_secondary_cpu (struct cpuinfo_x86 *);extern void print_cpu_info (struct cpuinfo_x86 *);
arch/x86/include/asm/static_call.h +15 -0
@@ -65,4 +65,19 @@extern bool __static_call_fixup (void *tramp,u8 op,void *dest); +extern void __static_call_update_early (void *tramp,void *func); + +#define static_call_update_early (name, _func) \ +({ \ + typeof(&STATIC_CALL_TRAMP(name)) __F = (_func); \ + if (static_call_initialized) { \ + __static_call_update(&STATIC_CALL_KEY(name), \ + STATIC_CALL_TRAMP_ADDR(name), __F);\ + } else { \ + WRITE_ONCE(STATIC_CALL_KEY(name).func, _func); \ + __static_call_update_early(STATIC_CALL_TRAMP_ADDR(name),\ + __F); \ + } \ +}) +#endif /* _ASM_STATIC_CALL_H */
arch/x86/include/asm/sync_core.h +3 -3
@@ -8,7 +8,7 @@#include <asm/special_insns.h> #ifdef CONFIG_X86_32 -static inline void iret_to_self (void ) +static __always_inline void iret_to_self(void) { asmvolatile ( "pushfl\n\t"
@@ -19,7 +19,7 @@ static inline void iret_to_self(void) : ASM_CALL_CONSTRAINT : : "memory"); }#else -static inline void iret_to_self (void ) +static __always_inline void iret_to_self(void) {unsigned int tmp;
@@ -55,7 +55,7 @@ static inline void iret_to_self(void)* Like all of Linux's memory ordering operations, this is a * compiler barrier as well. */ -static inline void sync_core (void ) +static __always_inline void sync_core(void) {/* * The SERIALIZE instruction is the most straightforward way to
arch/x86/include/asm/xen/hypercall.h +22 -14
@@ -39,9 +39,11 @@#include <linux/string.h> #include <linux/types.h> #include <linux/pgtable.h> +#include <linux/instrumentation.h> #include <trace/events/xen.h> +#include <asm/alternative.h> #include <asm/page.h> #include <asm/smap.h> #include <asm/nospec-branch.h>
@@ -86,11 +88,20 @@ struct xen_dm_op_buf;* there aren't more than 5 arguments...) */ -extern struct {char _entry[32 ]; } hypercall_page[]; +void xen_hypercall_func (void ); +DECLARE_STATIC_CALL (xen_hypercall, xen_hypercall_func); -#define __HYPERCALL "call hypercall_page+%c[offset]" -#define __HYPERCALL_ENTRY (x) \ - [offset] "i" (__HYPERVISOR_##x * sizeof(hypercall_page[0])) +#ifdef MODULE +#define __ADDRESSABLE_xen_hypercall +#else +#define __ADDRESSABLE_xen_hypercall __ADDRESSABLE_ASM_STR(__SCK__xen_hypercall) +#endif + +#define __HYPERCALL \ + __ADDRESSABLE_xen_hypercall \ + "call __SCT__xen_hypercall" + +#define __HYPERCALL_ENTRY (x) "a" (x)#ifdef CONFIG_X86_32 #define __HYPERCALL_RETREG "eax"
@@ -148,7 +159,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_0ARG (); \ asm volatile (__HYPERCALL \ : __HYPERCALL_0PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER0); \ (type)__res; \ })
@@ -159,7 +170,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_1ARG (a1); \ asm volatile (__HYPERCALL \ : __HYPERCALL_1PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER1); \ (type)__res; \ })
@@ -170,7 +181,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_2ARG (a1, a2); \ asm volatile (__HYPERCALL \ : __HYPERCALL_2PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER2); \ (type)__res; \ })
@@ -181,7 +192,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_3ARG (a1, a2, a3); \ asm volatile (__HYPERCALL \ : __HYPERCALL_3PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER3); \ (type)__res; \ })
@@ -192,7 +203,7 @@ extern struct { char _entry[32]; } hypercall_page[];__HYPERCALL_4ARG (a1, a2, a3, a4); \ asm volatile (__HYPERCALL \ : __HYPERCALL_4PARAM \ - : __HYPERCALL_ENTRY(name) \ + : __HYPERCALL_ENTRY(__HYPERVISOR_ ## name) \ : __HYPERCALL_CLOBBER4); \ (type)__res; \ })
@@ -206,12 +217,9 @@ xen_single_call(unsigned int call, __HYPERCALL_DECLS;__HYPERCALL_5ARG (a1, a2, a3, a4, a5); -if (call >=PAGE_SIZE /sizeof (hypercall_page[0 ])) -return -EINVAL ; - - asmvolatile (CALL_NOSPEC + asm volatile(__HYPERCALL : __HYPERCALL_5PARAM - : [thunk_target] "a" (&hypercall_page[call]) + : __HYPERCALL_ENTRY(call) : __HYPERCALL_CLOBBER5);return (long )__res;
arch/x86/kernel/callthunks.c +0 -5
@@ -145,11 +145,6 @@ static bool skip_addr(void *dest)if (dest >= (void *)relocate_kernel && dest < (void *)relocate_kernel +KEXEC_CONTROL_CODE_MAX_SIZE )return true; -#endif -#ifdef CONFIG_XEN -if (dest >= (void *)hypercall_page && - dest < (void *)hypercall_page +PAGE_SIZE ) -return true;#endif return false; }
arch/x86/kernel/cpu/common.c +22 -16
@@ -927,7 +927,7 @@ void detect_ht(struct cpuinfo_x86 *c)#endif } -static void get_cpu_vendor (struct cpuinfo_x86 *c) +void get_cpu_vendor (struct cpuinfo_x86 *c) {char *v = c->x86_vendor_id;int i;
@@ -1692,15 +1692,11 @@ static void __init early_identify_cpu(struct cpuinfo_x86 *c)detect_nopl (); } -void __init early_cpu_init (void ) +void __init init_cpu_devs (void ) {const struct cpu_dev *const *cdev;int count =0 ; -#ifdef CONFIG_PROCESSOR_SELECT -pr_info ("KERNEL supported cpus:\n" ); -#endif -for (cdev = __x86_cpu_dev_start; cdev < __x86_cpu_dev_end; cdev++) {const struct cpu_dev *cpudev = *cdev;
@@ -1708,20 +1704,30 @@ void __init early_cpu_init(void)break ; cpu_devs[count] = cpudev; count++; + } +} +void __init early_cpu_init (void ) +{#ifdef CONFIG_PROCESSOR_SELECT - { -unsigned int j; - -for (j =0 ; j <2 ; j++) { -if (!cpudev->c_ident[j]) -continue ; -pr_info (" %s %s\n" , cpudev->c_vendor, - cpudev->c_ident[j]); - } - } +unsigned int i, j; + +pr_info ("KERNEL supported cpus:\n" );#endif + +init_cpu_devs (); + +#ifdef CONFIG_PROCESSOR_SELECT +for (i =0 ; i <X86_VENDOR_NUM && cpu_devs[i]; i++) { +for (j =0 ; j <2 ; j++) { +if (!cpu_devs[i]->c_ident[j]) +continue ; +pr_info (" %s %s\n" , cpu_devs[i]->c_vendor, + cpu_devs[i]->c_ident[j]); + } } +#endif +early_identify_cpu (&boot_cpu_data); }
arch/x86/kernel/static_call.c +9 -0
@@ -172,6 +172,15 @@ void arch_static_call_transform(void *site, void *tramp, void *func, bool tail) }EXPORT_SYMBOL_GPL (arch_static_call_transform); +noinstr void __static_call_update_early(void *tramp, void *func) +{ +BUG_ON (system_state !=SYSTEM_BOOTING ); +BUG_ON (!early_boot_irqs_disabled); +BUG_ON (static_call_initialized); +__text_gen_insn (tramp,JMP32_INSN_OPCODE , tramp, func,JMP32_INSN_SIZE ); +sync_core (); +} +#ifdef CONFIG_RETHUNK /* * This is called by apply_returns() to fix up static call trampolines,
arch/x86/xen/enlighten.c +64 -1
83 lines not on this page · raw message
arch/x86/xen/enlighten_hvm.c +5 -8
@@ -108,15 +108,8 @@ static void __init init_hvm_pv_info(void)/* PVH set up hypercall page in xen_prepare_pvh(). */ if (xen_pvh_domain ()) pv_info.name ="Xen PVH" ; -else { -u64 pfn; -uint32_t msr; - +else pv_info.name ="Xen HVM" ; - msr =cpuid_ebx (base +2 ); - pfn =__pa (hypercall_page); -wrmsr_safe (msr, (u32 )pfn, (u32)(pfn >>32 )); - }xen_setup_features ();
@@ -298,6 +291,10 @@ static uint32_t __init xen_platform_hvm(void)if (xen_pv_domain ())return 0 ; +/* Set correct hypercall function. */ +if (xen_domain) +xen_hypercall_setfunc (); +if (xen_pvh_domain () && nopv) {/* Guest booting via the Xen-PVH boot entry goes here */ pr_info ("\"nopv\" parameter is ignored in PVH guest\n" );
arch/x86/xen/enlighten_pv.c +3 -1
@@ -1329,6 +1329,9 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si) xen_domain_type =XEN_PV_DOMAIN ; xen_start_flags = xen_start_info->flags; +/* Interrupts are guaranteed to be off initially. */ + early_boot_irqs_disabled = true; +static_call_update_early (xen_hypercall, xen_hypercall_pv);xen_setup_features ();
@@ -1419,7 +1422,6 @@ asmlinkage __visible void __init xen_start_kernel(struct start_info *si)WARN_ON (xen_cpuhp_setup (xen_cpu_up_prepare_pv, xen_cpu_dead_pv));local_irq_disable (); - early_boot_irqs_disabled = true;xen_raw_console_write ("mapping kernel into physical memory\n" ); xen_setup_kernel_pagetable((pgd_t *)xen_start_info->pt_base,
arch/x86/xen/enlighten_pvh.c +0 -7
@@ -28,17 +28,10 @@ EXPORT_SYMBOL_GPL(xen_pvh);void __init xen_pvh_init (struct boot_params *boot_params) { -u32 msr; -u64 pfn; - xen_pvh =1 ; xen_domain_type =XEN_HVM_DOMAIN ; xen_start_flags = pvh_start_info.flags; - msr =cpuid_ebx (xen_cpuid_base () +2 ); - pfn =__pa (hypercall_page); -wrmsr_safe (msr, (u32 )pfn, (u32)(pfn >>32 )); -if (xen_initial_domain ()) x86_init.oem.arch_setup = xen_add_preferred_consoles; x86_init.oem.banner = xen_banner;
arch/x86/xen/xen-asm.S +41 -9
82 lines not on this page · raw message
arch/x86/xen/xen-head.S +83 -23
133 lines not on this page · raw message
arch/x86/xen/xen-ops.h +9 -0
@@ -181,4 +181,13 @@ static inline void xen_hvm_post_suspend(int suspend_cancelled) {}void xen_add_extra_mem (unsigned long start_pfn,unsigned long n_pfns); +#ifdef CONFIG_XEN_PV +void xen_hypercall_pv (void ); +#endif +void xen_hypercall_hvm (void ); +void xen_hypercall_amd (void ); +void xen_hypercall_intel (void ); +void xen_hypercall_setfunc (void ); +void *__xen_hypercall_setfunc (void ); +#endif /* XEN_OPS_H */
block/blk-cgroup.c +5 -1
@@ -1325,10 +1325,14 @@ void blkcg_unpin_online(struct cgroup_subsys_state *blkcg_css)struct blkcg *blkcg =css_to_blkcg (blkcg_css);do { +struct blkcg *parent; +if (!refcount_dec_and_test (&blkcg->online_pin))break ; + + parent =blkcg_parent (blkcg);blkcg_destroy_blkgs (blkcg); - blkcg =blkcg_parent (blkcg); + blkcg = parent; }while (blkcg); }
block/blk-iocost.c +8 -1
@@ -1098,7 +1098,14 @@ static void __propagate_weights(struct ioc_gq *iocg, u32 active, u32 inuse, inuse =DIV64_U64_ROUND_UP (active * iocg->child_inuse_sum, iocg->child_active_sum); }else { - inuse =clamp_t (u32, inuse,1 , active); +/* +* It may be tempting to turn this into a clamp expression with +* a lower limit of 1 but active may be 0, which cannot be used +* as an upper limit in that situation. This expression allows +* active to clamp inuse unless it is 0, in which case inuse +* becomes 1. +*/ + inuse =min (inuse, active) ?:1 ; } iocg->last_inuse = iocg->inuse;
drivers/acpi/acpica/evxfregn.c +0 -2
@@ -232,8 +232,6 @@ acpi_remove_address_space_handler(acpi_handle device,/* Now we can delete the handler object */ -acpi_os_release_mutex (handler_obj->address_space. - context_mutex);acpi_ut_remove_reference (handler_obj); goto unlock_and_exit; }
drivers/acpi/nfit/core.c +6 -1
@@ -454,8 +454,13 @@ int acpi_nfit_ctl(struct nvdimm_bus_descriptor *nd_desc, struct nvdimm *nvdimm,if (cmd_rc) *cmd_rc = -EINVAL ; -if (cmd ==ND_CMD_CALL ) +if (cmd ==ND_CMD_CALL ) { +if (!buf || buf_len <sizeof (*call_pkg)) +return -EINVAL ; + call_pkg = buf; + } + func =cmd_to_func (nfit_mem, cmd, call_pkg, &family);if (func <0 )return func;
drivers/acpi/resource.c +3 -3
@@ -250,6 +250,9 @@ static bool acpi_decode_space(struct resource_win *win,switch (addr->resource_type) {case ACPI_MEMORY_RANGE :acpi_dev_memresource_flags (res, len, wp); + +if (addr->info.mem.caching ==ACPI_PREFETCHABLE_MEMORY ) + res->flags |=IORESOURCE_PREFETCH ;break ;case ACPI_IO_RANGE : acpi_dev_ioresource_flags(res, len, iodec,
@@ -265,9 +268,6 @@ static bool acpi_decode_space(struct resource_win *win,if (addr->producer_consumer ==ACPI_PRODUCER ) res->flags |=IORESOURCE_WINDOW ; -if (addr->info.mem.caching ==ACPI_PREFETCHABLE_MEMORY ) - res->flags |=IORESOURCE_PREFETCH ; -return !(res->flags &IORESOURCE_DISABLED ); }
drivers/ata/sata_highbank.c +1 -0
@@ -348,6 +348,7 @@ static int highbank_initialize_phys(struct device *dev, void __iomem *addr) phy_nodes[phy] = phy_data.np; cphy_base[phy] =of_iomap (phy_nodes[phy],0 );if (cphy_base[phy] ==NULL ) { +of_node_put (phy_data.np);return 0 ; } phy_count +=1 ;
drivers/bluetooth/btmtk.c +12 -8
@@ -371,6 +371,7 @@ int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb) {struct btmediatek_data *data =hci_get_priv (hdev);int err; +bool complete = false;if (!IS_ENABLED (CONFIG_DEV_COREDUMP )) {kfree_skb (skb);
@@ -392,19 +393,22 @@ int btmtk_process_coredump(struct hci_dev *hdev, struct sk_buff *skb) fallthrough;case HCI_DEVCOREDUMP_ACTIVE :default : +/* Mediatek coredump data would be more than MTK_COREDUMP_NUM */ +if (data->cd_info.cnt >=MTK_COREDUMP_NUM && + skb->len >MTK_COREDUMP_END_LEN ) +if (!memcmp ((char *)&skb->data[skb->len -MTK_COREDUMP_END_LEN ], +MTK_COREDUMP_END ,MTK_COREDUMP_END_LEN -1 )) + complete = true; + err =hci_devcd_append (hdev, skb);if (err <0 )break ; data->cd_info.cnt++; -/* Mediatek coredump data would be more than MTK_COREDUMP_NUM */ -if (data->cd_info.cnt >MTK_COREDUMP_NUM && - skb->len >MTK_COREDUMP_END_LEN ) -if (!memcmp ((char *)&skb->data[skb->len -MTK_COREDUMP_END_LEN ], -MTK_COREDUMP_END ,MTK_COREDUMP_END_LEN -1 )) { -bt_dev_info (hdev,"Mediatek coredump end" ); -hci_devcd_complete (hdev); - } +if (complete) { +bt_dev_info (hdev,"Mediatek coredump end" ); +hci_devcd_complete (hdev); + }break ; }
drivers/gpu/drm/amd/amdgpu/uvd_v7_0.c +1 -1
@@ -1286,7 +1286,7 @@ static int uvd_v7_0_ring_patch_cs_in_place(struct amdgpu_cs_parser *p,struct amdgpu_job *job, struct amdgpu_ib *ib) { - struct amdgpu_ring *ring = to_amdgpu_ring(job->base.sched); + struct amdgpu_ring *ring = amdgpu_job_ring(job);unsigned i;/* No patching necessary for the first instance */
drivers/gpu/drm/i915/i915_gpu_error.c +15 -3
@@ -1638,9 +1638,21 @@ capture_engine(struct intel_engine_cs *engine,return NULL ;intel_engine_get_hung_entity (engine, &ce, &rq); -if (rq && !i915_request_started (rq)) -drm_info (&engine->gt->i915->drm,"Got hung context on %s with active request %lld:%lld [0x%04X] not yet started\n" , - engine->name, rq->fence.context, rq->fence.seqno, ce->guc_id.id); +if (rq && !i915_request_started (rq)) { +/* +* We want to know also what is the guc_id of the context, +* but if we don't have the context reference, then skip +* printing it. +*/ +if (ce) +drm_info (&engine->gt->i915->drm, +"Got hung context on %s with active request %lld:%lld [0x%04X] not yet started\n" , + engine->name, rq->fence.context, rq->fence.seqno, ce->guc_id.id); +else +drm_info (&engine->gt->i915->drm, +"Got hung context on %s with active request %lld:%lld not yet started\n" , + engine->name, rq->fence.context, rq->fence.seqno); + }if (rq) { capture =intel_engine_coredump_add_request (ee, rq,ATOMIC_MAYFAIL );
drivers/gpu/drm/i915/i915_scheduler.c +1 -1
@@ -506,6 +506,6 @@ int __init i915_scheduler_module_init(void)return 0 ; err_priorities: -kmem_cache_destroy (slab_priorities); +kmem_cache_destroy (slab_dependencies);return -ENOMEM ; }
drivers/net/bonding/bond_main.c +1 -0
@@ -1462,6 +1462,7 @@ static netdev_features_t bond_fix_features(struct net_device *dev,#define BOND_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \ + NETIF_F_GSO_ENCAP_ALL | \ NETIF_F_HIGHDMA | NETIF_F_LRO)#define BOND_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \
drivers/net/dsa/microchip/ksz_common.c +18 -24
78 lines not on this page · raw message
drivers/net/dsa/ocelot/felix_vsc9959.c +11 -6
@@ -24,7 +24,7 @@#define VSC9959_NUM_PORTS 6#define VSC9959_TAS_GCL_ENTRY_MAX 63 -#define VSC9959_TAS_MIN_GATE_LEN_NS 33 +#define VSC9959_TAS_MIN_GATE_LEN_NS 35#define VSC9959_VCAP_POLICER_BASE 63#define VSC9959_VCAP_POLICER_MAX 383#define VSC9959_SWITCH_PCI_BAR 4
@@ -1056,11 +1056,15 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot)mdiobus_free (felix->imdio); } -/* The switch considers any frame (regardless of size) as eligible for -* transmission if the traffic class gate is open for at least 33 ns. +/* The switch considers any frame (regardless of size) as eligible +* for transmission if the traffic class gate is open for at least +* VSC9959_TAS_MIN_GATE_LEN_NS. +* * Overruns are prevented by cropping an interval at the end of the gate time -* slot for which egress scheduling is blocked, but we need to still keep 33 ns -* available for one packet to be transmitted, otherwise the port tc will hang. +* slot for which egress scheduling is blocked, but we need to still keep +* VSC9959_TAS_MIN_GATE_LEN_NS available for one packet to be transmitted, +* otherwise the port tc will hang. +* * This function returns the size of a gate interval that remains available for * setting the guard band, after reserving the space for one egress frame. */
@@ -1303,7 +1307,8 @@ static void vsc9959_tas_guard_bands_update(struct ocelot *ocelot, int port)* per-tc static guard band lengths, so it reduces the * useful gate interval length. Therefore, be careful * to calculate a guard band (and therefore max_sdu) -* that still leaves 33 ns available in the time slot. +* that still leaves VSC9959_TAS_MIN_GATE_LEN_NS +* available in the time slot. */ max_sdu =div_u64 (remaining_gate_len_ps, picos_per_byte);/* A TC gate may be completely closed, which is a
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h +1 -1
@@ -2082,7 +2082,7 @@ void t4_idma_monitor(struct adapter *adapter,struct sge_idma_monitor_state *idma, int hz, int ticks);int t4_set_vf_mac_acl (struct adapter *adapter,unsigned int vf, -unsigned int naddr,u8 *addr); +u8 start,unsigned int naddr,u8 *addr);void t4_tp_pio_read (struct adapter *adap,u32 *buff,u32 nregs,u32 start_index,bool sleep_ok); void t4_tp_tm_pio_read(struct adapter *adap, u32 *buff, u32 nregs,
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +1 -1
@@ -3246,7 +3246,7 @@ static int cxgb4_mgmt_set_vf_mac(struct net_device *dev, int vf, u8 *mac)dev_info (pi->adapter->pdev_dev,"Setting MAC %pM on VF %d\n" , mac, vf); - ret =t4_set_vf_mac_acl (adap, vf +1 ,1 , mac); + ret =t4_set_vf_mac_acl (adap, vf +1 , pi->lport,1 , mac);if (!ret)ether_addr_copy (adap->vfinfo[vf].vf_mac_addr, mac);return ret;
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c +3 -2
@@ -10215,11 +10215,12 @@ int t4_load_cfg(struct adapter *adap, const u8 *cfg_data, unsigned int size)* t4_set_vf_mac_acl - Set MAC address for the specified VF * @adapter: The adapter * @vf: one of the VFs instantiated by the specified PF +* @start: The start port id associated with specified VF * @naddr: the number of MAC addresses * @addr: the MAC address(es) to be set to the specified VF */ int t4_set_vf_mac_acl (struct adapter *adapter,unsigned int vf, -unsigned int naddr,u8 *addr) +u8 start,unsigned int naddr,u8 *addr) {struct fw_acl_mac_cmd cmd;
@@ -10234,7 +10235,7 @@ int t4_set_vf_mac_acl(struct adapter *adapter, unsigned int vf, cmd.en_to_len16 =cpu_to_be32 ((unsigned int )FW_LEN16 (cmd)); cmd.nmac = naddr; -switch (adapter->pf) { +switch (start) {case 3 :memcpy (cmd.macaddr3, addr,sizeof (cmd.macaddr3));break ;
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_domain.c +3 -1
@@ -297,7 +297,9 @@ dr_domain_add_vport_cap(struct mlx5dr_domain *dmn, u16 vport)if (ret) {mlx5dr_dbg (dmn,"Couldn't insert new vport into xarray (%d)\n" , ret);kvfree (vport_caps); -return ERR_PTR (ret); +if (ret == -EBUSY ) +return ERR_PTR (-EBUSY ); +return NULL ; }return vport_caps;
drivers/net/ethernet/microchip/sparx5/sparx5_main.c +5 -6
@@ -693,12 +693,11 @@ static int sparx5_start(struct sparx5 *sparx5) err = -ENXIO ;if (sparx5->fdma_irq >=0 ) {if (GCB_CHIP_ID_REV_ID_GET (sparx5->chip_id) >0 ) - err =devm_request_threaded_irq (sparx5->dev, - sparx5->fdma_irq, -NULL , - sparx5_fdma_handler, -IRQF_ONESHOT , -"sparx5-fdma" , sparx5); + err =devm_request_irq (sparx5->dev, + sparx5->fdma_irq, + sparx5_fdma_handler, +0 , +"sparx5-fdma" , sparx5);if (!err) err =sparx5_fdma_start (sparx5);if (err)
drivers/net/ethernet/microchip/sparx5/sparx5_port.c +1 -1
@@ -1119,7 +1119,7 @@ int sparx5_port_init(struct sparx5 *sparx5,spx5_inst_rmw (DEV10G_MAC_MAXLEN_CFG_MAX_LEN_SET (ETH_MAXLEN ),DEV10G_MAC_MAXLEN_CFG_MAX_LEN , devinst, -DEV10G_MAC_ENA_CFG (0 )); +DEV10G_MAC_MAXLEN_CFG (0 ));/* Handle Signal Detect in 10G PCS */ spx5_inst_wr(PCS10G_BR_PCS_SD_CFG_SD_POL_SET(sd_pol) |
drivers/net/ethernet/mscc/ocelot_ptp.c +129 -80
299 lines not on this page · raw message
drivers/net/ethernet/qualcomm/qca_spi.c +11 -15
@@ -66,7 +66,7 @@ MODULE_PARM_DESC(qcaspi_burst_len, "Number of data bytes per burst. Use 1-5000."#define QCASPI_PLUGGABLE_MIN 0#define QCASPI_PLUGGABLE_MAX 1 -static int qcaspi_pluggable =QCASPI_PLUGGABLE_MIN ; +static int qcaspi_pluggable =QCASPI_PLUGGABLE_MAX ;module_param (qcaspi_pluggable, int,0 );MODULE_PARM_DESC (qcaspi_pluggable,"Pluggable SPI connection (yes/no)." );
@@ -828,7 +828,6 @@ qcaspi_netdev_init(struct net_device *dev) dev->mtu =QCAFRM_MAX_MTU ; dev->type =ARPHRD_ETHER ; - qca->clkspeed = qcaspi_clkspeed; qca->burst_len = qcaspi_burst_len; qca->spi_thread =NULL ; qca->buffer_size = (dev->mtu + VLAN_ETH_HLEN + QCAFRM_HEADER_LEN +
@@ -917,17 +916,15 @@ qca_spi_probe(struct spi_device *spi) legacy_mode =of_property_read_bool (spi->dev.of_node,"qca,legacy-mode" ); -if (qcaspi_clkspeed ==0 ) { -if (spi->max_speed_hz) - qcaspi_clkspeed = spi->max_speed_hz; -else - qcaspi_clkspeed =QCASPI_CLK_SPEED ; - } +if (qcaspi_clkspeed) + spi->max_speed_hz = qcaspi_clkspeed; +else if (!spi->max_speed_hz) + spi->max_speed_hz =QCASPI_CLK_SPEED ; -if ((qcaspi_clkspeed <QCASPI_CLK_SPEED_MIN ) || - (qcaspi_clkspeed >QCASPI_CLK_SPEED_MAX )) { -dev_err (&spi->dev,"Invalid clkspeed: %d\n" , - qcaspi_clkspeed); +if (spi->max_speed_hz <QCASPI_CLK_SPEED_MIN || + spi->max_speed_hz >QCASPI_CLK_SPEED_MAX ) { +dev_err (&spi->dev,"Invalid clkspeed: %u\n" , + spi->max_speed_hz);return -EINVAL ; }
@@ -952,14 +949,13 @@ qca_spi_probe(struct spi_device *spi)return -EINVAL ; } -dev_info (&spi->dev,"ver=%s, clkspeed=%d, burst_len=%d, pluggable=%d\n" , +dev_info (&spi->dev,"ver=%s, clkspeed=%u, burst_len=%d, pluggable=%d\n" ,QCASPI_DRV_VERSION , - qcaspi_clkspeed, + spi->max_speed_hz, qcaspi_burst_len, qcaspi_pluggable); spi->mode =SPI_MODE_3 ; - spi->max_speed_hz = qcaspi_clkspeed;if (spi_setup (spi) <0 ) {dev_err (&spi->dev,"Unable to setup SPI device\n" );return -EFAULT ;
drivers/net/ethernet/qualcomm/qca_spi.h +0 -1
@@ -101,7 +101,6 @@ struct qcaspi {#endif /* user configurable options */ -u32 clkspeed;u8 legacy_mode;u16 burst_len; };
drivers/net/ethernet/renesas/rswitch.c +235 -138
777 lines not on this page · raw message
drivers/net/ethernet/renesas/rswitch.h +32 -16
82 lines not on this page · raw message
drivers/net/team/team.c +2 -1
@@ -982,7 +982,8 @@ static void team_port_disable(struct team *team,#define TEAM_VLAN_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ NETIF_F_FRAGLIST | NETIF_F_GSO_SOFTWARE | \ - NETIF_F_HIGHDMA | NETIF_F_LRO) + NETIF_F_HIGHDMA | NETIF_F_LRO | \ + NETIF_F_GSO_ENCAP_ALL)#define TEAM_ENC_FEATURES (NETIF_F_HW_CSUM | NETIF_F_SG | \ NETIF_F_RXCSUM | NETIF_F_GSO_SOFTWARE)
drivers/net/xen-netfront.c +4 -1
@@ -867,7 +867,7 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *devstatic int xennet_close (struct net_device *dev) {struct netfront_info *np =netdev_priv (dev); -unsigned int num_queues = dev->real_num_tx_queues; +unsigned int num_queues = np->queues ? dev->real_num_tx_queues :0 ;unsigned int i;struct netfront_queue *queue;netif_tx_stop_all_queues (np->netdev);
@@ -882,6 +882,9 @@ static void xennet_destroy_queues(struct netfront_info *info) {unsigned int i; +if (!info->queues) +return ; +for (i =0 ; i < info->netdev->real_num_tx_queues; i++) {struct netfront_queue *queue = &info->queues[i];
drivers/ptp/ptp_kvm_x86.c +3 -3
@@ -26,7 +26,7 @@ int kvm_arch_ptp_init(void)long ret;if (!kvm_para_available ()) -return -ENODEV ; +return -EOPNOTSUPP ;if (cc_platform_has (CC_ATTR_GUEST_MEM_ENCRYPT )) { p =alloc_page (GFP_KERNEL | __GFP_ZERO);
@@ -46,14 +46,14 @@ int kvm_arch_ptp_init(void) clock_pair_gpa =slow_virt_to_phys (clock_pair);if (!pvclock_get_pvti_cpu0_va ()) { - ret = -ENODEV ; + ret = -EOPNOTSUPP ; goto err; } ret =kvm_hypercall2 (KVM_HC_CLOCK_PAIRING , clock_pair_gpa,KVM_CLOCK_PAIRING_WALLCLOCK );if (ret == -KVM_ENOSYS ) { - ret = -ENODEV ; + ret = -EOPNOTSUPP ; goto err; }
drivers/spi/spi-aspeed-smc.c +6 -4
@@ -239,7 +239,7 @@ static ssize_t aspeed_spi_read_user(struct aspeed_spi_chip *chip, ret =aspeed_spi_send_cmd_addr (chip, op->addr.nbytes, offset, op->cmd.opcode);if (ret <0 ) -return ret; + goto stop_user;if (op->dummy.buswidth && op->dummy.nbytes) {for (i =0 ; i < op->dummy.nbytes / op->dummy.buswidth; i++)
@@ -249,8 +249,9 @@ static ssize_t aspeed_spi_read_user(struct aspeed_spi_chip *chip,aspeed_spi_set_io_mode (chip, io_mode);aspeed_spi_read_from_ahb (buf, chip->ahb_base, len); +stop_user:aspeed_spi_stop_user (chip); -return 0 ; +return ret; } static ssize_t aspeed_spi_write_user(struct aspeed_spi_chip *chip,
@@ -261,10 +262,11 @@ static ssize_t aspeed_spi_write_user(struct aspeed_spi_chip *chip,aspeed_spi_start_user (chip); ret =aspeed_spi_send_cmd_addr (chip, op->addr.nbytes, op->addr.val, op->cmd.opcode);if (ret <0 ) -return ret; + goto stop_user;aspeed_spi_write_to_ahb (chip->ahb_base, op->data.buf.out, op->data.nbytes); +stop_user:aspeed_spi_stop_user (chip); -return 0 ; +return ret; }/* support for 1-1-1, 1-1-2 or 1-1-4 */
drivers/ufs/core/ufshcd.c +1 -0
@@ -5439,6 +5439,7 @@ void ufshcd_compl_one_cqe(struct ufs_hba *hba, int task_tag, lrbp = &hba->lrb[task_tag]; lrbp->compl_time_stamp =ktime_get (); + lrbp->compl_time_stamp_local_clock =local_clock (); cmd = lrbp->cmd;if (cmd) {if (unlikely (ufshcd_should_inform_monitor (hba, lrbp)))
drivers/usb/dwc2/hcd.c +8 -11
@@ -3546,11 +3546,9 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq, port_status |=USB_PORT_STAT_C_OVERCURRENT <<16 ; } -if (!hsotg->flags.b.port_connect_status) { +if (dwc2_is_device_mode (hsotg)) {/* -* The port is disconnected, which means the core is -* either in device mode or it soon will be. Just -* return 0's for the remainder of the port status +* Just return 0's for the remainder of the port status * since the port register can't be read if the core * is in device mode. */
@@ -3620,13 +3618,11 @@ static int dwc2_hcd_hub_control(struct dwc2_hsotg *hsotg, u16 typereq,if (wvalue !=USB_PORT_FEAT_TEST && (!windex || windex >1 )) goto error; -if (!hsotg->flags.b.port_connect_status) { +if (dwc2_is_device_mode (hsotg)) {/* -* The port is disconnected, which means the core is -* either in device mode or it soon will be. Just -* return without doing anything since the port -* register can't be written if the core is in device -* mode. +* Just return 0's for the remainder of the port status +* since the port register can't be read if the core +* is in device mode. */ break ; }
@@ -4349,7 +4345,7 @@ static int _dwc2_hcd_suspend(struct usb_hcd *hcd)if (hsotg->bus_suspended) goto skip_power_saving; -if (hsotg->flags.b.port_connect_status ==0 ) +if (!(dwc2_read_hprt0 (hsotg) &HPRT0_CONNSTS )) goto skip_power_saving;switch (hsotg->params.power_down) {
@@ -4431,6 +4427,7 @@ static int _dwc2_hcd_resume(struct usb_hcd *hcd)* Power Down mode. */ if (hprt0 &HPRT0_CONNSTS ) { +set_bit (HCD_FLAG_HW_ACCESSIBLE , &hcd->flags); hsotg->lx_state =DWC2_L0 ; goto unlock; }
drivers/usb/dwc3/dwc3-xilinx.c +4 -1
@@ -121,8 +121,11 @@ static int dwc3_xlnx_init_zynqmp(struct dwc3_xlnx *priv_data)* in use but the usb3-phy entry is missing from the device tree. * Therefore, skip these operations in this case. */ -if (!priv_data->usb3_phy) +if (!priv_data->usb3_phy) { +/* Deselect the PIPE Clock Select bit in FPD PIPE Clock register */ +writel (PIPE_CLK_DESELECT , priv_data->regs +XLNX_USB_FPD_PIPE_CLK ); goto skip_usb3_phy; + } crst =devm_reset_control_get_exclusive (dev,"usb_crst" );if (IS_ERR (crst)) {
drivers/usb/gadget/function/f_midi2.c +5 -1
@@ -1593,7 +1593,11 @@ static int f_midi2_create_card(struct f_midi2 *midi2) fb->info.midi_ci_version = b->midi_ci_version; fb->info.ui_hint =reverse_dir (b->ui_hint); fb->info.sysex8_streams = b->sysex8_streams; - fb->info.flags |= b->is_midi1; +if (b->is_midi1 <2 ) + fb->info.flags |= b->is_midi1; +else + fb->info.flags |=SNDRV_UMP_BLOCK_IS_MIDI1 | +SNDRV_UMP_BLOCK_IS_LOWSPEED ;strscpy (fb->info.name,ump_fb_name (b),sizeof (fb->info.name)); }
drivers/usb/gadget/function/u_serial.c +6 -3
@@ -575,9 +575,12 @@ static int gs_start_io(struct gs_port *port)* we didn't in gs_start_tx() */ tty_wakeup (port->port.tty); }else { -gs_free_requests (ep, head, &port->read_allocated); -gs_free_requests (port->port_usb->in, &port->write_pool, - &port->write_allocated); +/* Free reqs only if we are still connected */ +if (port->port_usb) { +gs_free_requests (ep, head, &port->read_allocated); +gs_free_requests (port->port_usb->in, &port->write_pool, + &port->write_allocated); + } status = -EIO ; }
drivers/usb/host/ehci-sh.c +7 -2
@@ -119,8 +119,12 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev)if (IS_ERR (priv->iclk)) priv->iclk =NULL ; -clk_enable (priv->fclk); -clk_enable (priv->iclk); + ret =clk_enable (priv->fclk); +if (ret) + goto fail_request_resource; + ret =clk_enable (priv->iclk); +if (ret) + goto fail_iclk; ret =usb_add_hcd (hcd, irq,IRQF_SHARED );if (ret !=0 ) {
@@ -136,6 +140,7 @@ static int ehci_hcd_sh_probe(struct platform_device *pdev) fail_add_hcd:clk_disable (priv->iclk); +fail_iclk:clk_disable (priv->fclk); fail_request_resource:
drivers/usb/host/max3421-hcd.c +11 -5
@@ -779,11 +779,17 @@ max3421_check_unlink(struct usb_hcd *hcd) retval =1 ;dev_dbg (&spi->dev,"%s: URB %p unlinked=%d" , __func__, urb, urb->unlinked); -usb_hcd_unlink_urb_from_ep (hcd, urb); -spin_unlock_irqrestore (&max3421_hcd->lock, - flags); -usb_hcd_giveback_urb (hcd, urb,0 ); -spin_lock_irqsave (&max3421_hcd->lock, flags); +if (urb == max3421_hcd->curr_urb) { + max3421_hcd->urb_done =1 ; + max3421_hcd->hien &= ~(BIT (MAX3421_HI_HXFRDN_BIT ) | +BIT (MAX3421_HI_RCVDAV_BIT )); + }else { +usb_hcd_unlink_urb_from_ep (hcd, urb); +spin_unlock_irqrestore (&max3421_hcd->lock, + flags); +usb_hcd_giveback_urb (hcd, urb,0 ); +spin_lock_irqsave (&max3421_hcd->lock, flags); + } } } }
drivers/usb/typec/anx7411.c +41 -25
179 lines not on this page · raw message
fs/smb/server/auth.c +2 -0
@@ -1012,6 +1012,8 @@ static int ksmbd_get_encryption_key(struct ksmbd_work *work, __u64 ses_id, ses_enc_key = enc ? sess->smb3encryptionkey : sess->smb3decryptionkey; +if (enc) +ksmbd_user_session_get (sess);memcpy (key, ses_enc_key,SMB3_ENC_DEC_KEY_SIZE );return 0 ;
fs/smb/server/mgmt/user_session.c +5 -1
@@ -262,8 +262,10 @@ struct ksmbd_session *ksmbd_session_lookup(struct ksmbd_conn *conn,down_read (&conn->session_lock); sess =xa_load (&conn->sessions, id); -if (sess) +if (sess) { sess->last_active = jiffies; +ksmbd_user_session_get (sess); + }up_read (&conn->session_lock);return sess; }
@@ -274,6 +276,8 @@ struct ksmbd_session *ksmbd_session_lookup_slowpath(unsigned long long id)down_read (&sessions_table_lock); sess =__session_lookup (id); +if (sess) +ksmbd_user_session_get (sess);up_read (&sessions_table_lock);return sess;
fs/smb/server/server.c +2 -2
@@ -241,14 +241,14 @@ static void __handle_ksmbd_work(struct ksmbd_work *work,if (work->tcon)ksmbd_tree_connect_put (work->tcon);smb3_preauth_hash_rsp (work); -if (work->sess) -ksmbd_user_session_put (work->sess);if (work->sess && work->sess->enc && work->encrypted && conn->ops->encrypt_resp) { rc = conn->ops->encrypt_resp (work);if (rc <0 ) conn->ops->set_rsp_status (work,STATUS_DATA_ERROR ); } +if (work->sess) +ksmbd_user_session_put (work->sess);ksmbd_conn_write (work); }
fs/smb/server/smb2pdu.c +14 -13
@@ -67,8 +67,10 @@ static inline bool check_session_id(struct ksmbd_conn *conn, u64 id)return false; sess =ksmbd_session_lookup_all (conn, id); -if (sess) +if (sess) { +ksmbd_user_session_put (sess);return true; + }pr_err ("Invalid user session id: %llu\n" , id);return false; }
@@ -605,10 +607,8 @@ int smb2_check_user_session(struct ksmbd_work *work)/* Check for validity of user session */ work->sess =ksmbd_session_lookup_all (conn, sess_id); -if (work->sess) { -ksmbd_user_session_get (work->sess); +if (work->sess)return 1 ; - }ksmbd_debug (SMB ,"Invalid user session, Uid %llu\n" , sess_id);return -ENOENT ; }
@@ -1704,29 +1704,35 @@ int smb2_sess_setup(struct ksmbd_work *work)if (conn->dialect != sess->dialect) { rc = -EINVAL ; +ksmbd_user_session_put (sess); goto out_err; }if (!(req->hdr.Flags &SMB2_FLAGS_SIGNED )) { rc = -EINVAL ; +ksmbd_user_session_put (sess); goto out_err; }if (strncmp (conn->ClientGUID, sess->ClientGUID,SMB2_CLIENT_GUID_SIZE )) { rc = -ENOENT ; +ksmbd_user_session_put (sess); goto out_err; }if (sess->state ==SMB2_SESSION_IN_PROGRESS ) { rc = -EACCES ; +ksmbd_user_session_put (sess); goto out_err; }if (sess->state ==SMB2_SESSION_EXPIRED ) { rc = -EFAULT ; +ksmbd_user_session_put (sess); goto out_err; } +ksmbd_user_session_put (sess);if (ksmbd_conn_need_reconnect (conn)) { rc = -EFAULT ;
@@ -1734,7 +1740,8 @@ int smb2_sess_setup(struct ksmbd_work *work) goto out_err; } -if (ksmbd_session_lookup (conn, sess_id)) { + sess =ksmbd_session_lookup (conn, sess_id); +if (!sess) { rc = -EACCES ; goto out_err; }
@@ -1745,7 +1752,6 @@ int smb2_sess_setup(struct ksmbd_work *work) } conn->binding = true; -ksmbd_user_session_get (sess); }else if ((conn->dialect <SMB30_PROT_ID || server_conf.flags &KSMBD_GLOBAL_FLAG_SMB3_MULTICHANNEL ) && (req->Flags &SMB2_SESSION_REQ_FLAG_BINDING )) {
@@ -1772,7 +1778,6 @@ int smb2_sess_setup(struct ksmbd_work *work) } conn->binding = false; -ksmbd_user_session_get (sess); } work->sess = sess;
@@ -2196,9 +2201,9 @@ int smb2_tree_disconnect(struct ksmbd_work *work)int smb2_session_logoff (struct ksmbd_work *work) {struct ksmbd_conn *conn = work->conn; +struct ksmbd_session *sess = work->sess;struct smb2_logoff_req *req;struct smb2_logoff_rsp *rsp; -struct ksmbd_session *sess;u64 sess_id;int err;
@@ -2220,11 +2225,6 @@ int smb2_session_logoff(struct ksmbd_work *work)ksmbd_close_session_fds (work);ksmbd_conn_wait_idle (conn); -/* -* Re-lookup session to validate if session is deleted -* while waiting request complete -*/ - sess =ksmbd_session_lookup_all (conn, sess_id);if (ksmbd_tree_conn_session_logoff (sess)) {ksmbd_debug (SMB ,"Invalid tid %d\n" , req->hdr.Id.SyncId.TreeId); rsp->hdr.Status =STATUS_NETWORK_NAME_DELETED ;
@@ -8964,6 +8964,7 @@ int smb3_decrypt_req(struct ksmbd_work *work) le64_to_cpu(tr_hdr->SessionId));return -ECONNABORTED ; } +ksmbd_user_session_put (sess); iov[0 ].iov_base = buf; iov[0 ].iov_len =sizeof (struct smb2_transform_hdr ) +4 ;
fs/xfs/libxfs/xfs_btree.c +23 -6
@@ -3429,14 +3429,31 @@ xfs_btree_insrec(xfs_btree_log_block (cur, bp,XFS_BB_NUMRECS );/* -* If we just inserted into a new tree block, we have to -* recalculate nkey here because nkey is out of date. +* Update btree keys to reflect the newly added record or keyptr. +* There are three cases here to be aware of. Normally, all we have to +* do is walk towards the root, updating keys as necessary. * -* Otherwise we're just updating an existing block (having shoved -* some records into the new tree block), so use the regular key -* update mechanism. +* If the caller had us target a full block for the insertion, we dealt +* with that by calling the _make_block_unfull function. If the +* "make unfull" function splits the block, it'll hand us back the key +* and pointer of the new block. We haven't yet added the new block to +* the next level up, so if we decide to add the new record to the new +* block (bp->b_bn != old_bn), we have to update the caller's pointer +* so that the caller adds the new block with the correct key. +* +* However, there is a third possibility-- if the selected block is the +* root block of an inode-rooted btree and cannot be expanded further, +* the "make unfull" function moves the root block contents to a new +* block and updates the root block to point to the new block. In this +* case, no block pointer is passed back because the block has already +* been added to the btree. In this case, we need to use the regular +* key update function, just like the first case. This is critical for +* overlapping btrees, because the high key must be updated to reflect +* the entire tree, not just the subtree accessible through the first +* child of the root (which is now two levels down from the root). */ -if (bp &&xfs_buf_daddr (bp) != old_bn) { +if (!xfs_btree_ptr_is_null (cur, &nptr) && + bp &&xfs_buf_daddr (bp) != old_bn) {xfs_btree_get_keys (cur, block, lkey); }else if (xfs_btree_needs_key_update (cur, optr)) { error =xfs_btree_update_keys (cur, level);
fs/xfs/libxfs/xfs_symlink_remote.c +3 -1
@@ -89,8 +89,10 @@ xfs_symlink_verify(struct xfs_mount *mp = bp->b_mount;struct xfs_dsymlink_hdr *dsl = bp->b_addr; +/* no verification of non-crc buffers */ if (!xfs_has_crc (mp)) -return __this_address; +return NULL ; +if (!xfs_verify_magic (bp, dsl->sl_magic))return __this_address;if (!uuid_equal (&dsl->sl_uuid, &mp->m_sb.sb_meta_uuid))
fs/xfs/scrub/trace.h +1 -1
@@ -506,7 +506,7 @@ TRACE_EVENT(xchk_ifork_btree_error,TP_fast_assign ( xfs_fsblock_t fsbno = xchk_btree_cur_fsbno(cur, level); __entry->dev = sc->mp->m_super->s_dev; - __entry->ino = sc->ip->i_ino; + __entry->ino = cur->bc_ino.ip->i_ino; __entry->whichfork = cur->bc_ino.whichfork; __entry->type = sc->sm->sm_type; __entry->btnum = cur->bc_btnum;
fs/xfs/xfs_file.c +8 -0
@@ -1220,6 +1220,14 @@ xfs_file_remap_range(xfs_iunlock2_remapping (src, dest);if (ret)trace_xfs_reflink_remap_range_error (dest, ret, _RET_IP_); +/* +* If the caller did not set CAN_SHORTEN, then it is not prepared to +* handle partial results -- either the whole remap succeeds, or we +* must say why it did not. In this case, any error should be returned +* to the caller. +*/ +if (ret && remapped < len && !(remap_flags &REMAP_FILE_CAN_SHORTEN )) +return ret;return remapped >0 ? remapped : ret; }
fs/xfs/xfs_trans.c +4 -12
@@ -955,13 +955,6 @@ __xfs_trans_commit(trace_xfs_trans_commit (tp, _RET_IP_); - error =xfs_trans_run_precommits (tp); -if (error) { -if (tp->t_flags &XFS_TRANS_PERM_LOG_RES ) -xfs_defer_cancel (tp); - goto out_unreserve; - } -/* * Finish deferred items on final commit. Only permanent transactions * should ever have deferred ops.
@@ -972,13 +965,12 @@ __xfs_trans_commit( error =xfs_defer_finish_noroll (&tp);if (error) goto out_unreserve; - -/* Run precommits from final tx in defer chain. */ - error =xfs_trans_run_precommits (tp); -if (error) - goto out_unreserve; } + error =xfs_trans_run_precommits (tp); +if (error) + goto out_unreserve; +/* * If there is nothing to be logged by the transaction, * then unlock all of the items associated with the
include/linux/bpf.h +5 -8
@@ -1988,26 +1988,25 @@ bpf_prog_run_array(const struct bpf_prog_array *array,* rcu-protected dynamically sized maps. */ static __always_inline u32 -bpf_prog_run_array_uprobe (const struct bpf_prog_array __rcu *array_rcu, +bpf_prog_run_array_uprobe (const struct bpf_prog_array *array,const void *ctx,bpf_prog_run_fn run_prog) {const struct bpf_prog_array_item *item;const struct bpf_prog *prog; -const struct bpf_prog_array *array;struct bpf_run_ctx *old_run_ctx;struct bpf_trace_run_ctx run_ctx;u32 ret =1 ;might_fault (); +RCU_LOCKDEP_WARN (!rcu_read_lock_trace_held (),"no rcu lock held" ); + +if (unlikely (!array)) +return ret; -rcu_read_lock_trace ();migrate_disable (); run_ctx.is_uprobe = true; - array =rcu_dereference_check (array_rcu,rcu_read_lock_trace_held ()); -if (unlikely (!array)) - goto out; old_run_ctx =bpf_set_run_ctx (&run_ctx.run_ctx); item = &array->items[0 ];while ((prog =READ_ONCE (item->prog))) {
@@ -2022,9 +2021,7 @@ bpf_prog_run_array_uprobe(const struct bpf_prog_array __rcu *array_rcu,rcu_read_unlock (); }bpf_reset_run_ctx (old_run_ctx); -out:migrate_enable (); -rcu_read_unlock_trace ();return ret; }
include/linux/compiler.h +26 -11
@@ -204,28 +204,43 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val,#endif /* __KERNEL__ */ +/** +* offset_to_ptr - convert a relative memory offset to an absolute pointer +* @off: the address of the 32-bit offset value +*/ +static inline void *offset_to_ptr (const int *off) +{ +return (void *)((unsigned long )off + *off); +} + +#endif /* __ASSEMBLY__ */ + +#ifdef CONFIG_64BIT +#define ARCH_SEL (a,b) a +#else +#define ARCH_SEL (a,b) b +#endif +/* * Force the compiler to emit 'sym' as a symbol, so that we can reference * it from inline assembler. Necessary in case 'sym' could be inlined * otherwise, or eliminated entirely due to lack of references that are * visible to the compiler. */
Lines of this file are not shown. View the raw message.
net/batman-adv/translation-table.c +40 -18
58 lines not on this page · raw message
net/bluetooth/iso.c +83 -4
87 lines not on this page · raw message
net/netfilter/xt_IDLETIMER.c +28 -24
52 lines not on this page · raw message
sound/usb/quirks.c +29 -15
44 lines not on this page · raw message
tools/testing/selftests/arm64/abi/syscall-abi-asm.S +15 -17
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/netlink_helpers.c new file +358 -0
358 lines not on this page · raw message
tools/testing/selftests/bpf/netlink_helpers.h new file +46 -0
46 lines not on this page · raw message
tools/testing/selftests/bpf/progs/verifier_btf_ctx_access.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/verifier_d_path.c +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/bpf/progs/verifier_scalar_ids.c +0 -16
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/mlxsw/sharedbuffer.sh +40 -15
55 lines not on this page · 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.