Skip to contentSkip to conversation

Linux 6.6.67

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages Dec 19, 2024 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'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

author maintainer
#1 lore raw
Documentation/power/runtime_pm.rst +3 -1
index 65b86e487afe..b6d5a3a8febc 100644
@@ -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
index 992450dfa0d3..e5c3df67faf8 100644
@@ -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
index 7388edd88986..d08bf7fb3aee 100644
@@ -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
index 1fa501b7d0c8..ff802d100a57 100644
@@ -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
index b592bed9ebcc..d9a51b638931 100644
@@ -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
index 67ad64efa926..6e775303d687 100644
@@ -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
index 343b722ccaf2..35d75c19b1e3 100644
@@ -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
index ab7382f92aff..96bda43538ee 100644
@@ -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)
 {
 	asm volatile (
 		"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
index a2dd24947eb8..97771b9d33af 100644
@@ -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;
-
-	asm volatile(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
index faa9f2299848..e78d5366b9e3 100644
@@ -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
index 852cc2ab4df9..8bc90a501e7b 100644
@@ -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
index 77a9316da435..e332d835d658 100644
@@ -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
index 3f8c34707c50..70be57e8f51c 100644
@@ -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
index aeb33e0a3f76..3df7c96e7388 100644
@@ -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
index c28f073c1df5..60b358c2f434 100644
@@ -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
index a6a21dd05527..607f3a42fe3b 100644
@@ -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
index 4fb045d26bd5..7347eb29524d 100644
@@ -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
index c3cb9c20b306..129732a8d0dd 100644
@@ -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
index 95f78383bbdb..bff2d099f469 100644
@@ -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
index 7d88db451cfb..7918923e3b74 100644
@@ -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
index d3d776d4fb5a..df598de0cb18 100644
@@ -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
index 63ef7bb073ce..596c6d294da9 100644
@@ -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
index 812fd2a8f853..4c53ab22d09b 100644
@@ -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
index 86d1d46e1e5e..4fba0b3d10f1 100644
@@ -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
index 4008bb09fdb5..074ff6016383 100644
@@ -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
index 762127dd56c5..70a854557e6e 100644
@@ -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
index bee93a437f99..7eb62fe55947 100644
@@ -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
index afb5dae4439c..8d27933c3733 100644
@@ -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
index fca9533bc011..2ed72c3fab42 100644
@@ -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
index 2eb33a727bba..b215ff14da1b 100644
@@ -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
index 76de55306c4d..175bf9b13058 100644
@@ -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
index 3d74109f8230..49f22cad92bf 100644
@@ -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
index 8f116982c08a..98bee953234b 100644
@@ -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
index 60dd2fd603a8..fcdaa37879f7 100644
@@ -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
index b697a9e6face..c24235d3b9f3 100644
@@ -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
index 58ad910068d4..b3b17bd46e12 100644
@@ -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
index f575f225d417..ae257fa43d87 100644
@@ -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
index 8d2aee88526c..bcb5651f18e0 100644
@@ -867,7 +867,7 @@ static netdev_tx_t xennet_start_xmit(struct sk_buff *skb, struct net_device *dev
 static 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
index 902844cc1a17..5e5b2ef78547 100644
@@ -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
index 21b0fa646c7d..38a0613d434a 100644
@@ -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
index 7d762c4edcc5..84dac9050074 100644
@@ -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
index dd5b1c5691e1..c1de38de2806 100644
@@ -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
index 19307d24f3a0..d19a5d2d65ad 100644
@@ -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
index 6908fdd4a83f..b7dada064890 100644
@@ -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
index 8962f96ae729..729b0472bab0 100644
@@ -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
index d31d9506e41a..7c2b2339e674 100644
@@ -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
index d152d72de126..a219260ad3e6 100644
@@ -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
index 09b20039636e..58380a986af5 100644
@@ -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
index e135e1bcc3b5..9a134181df61 100644
@@ -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
index 1450e007ac70..7f9aca4aa742 100644
@@ -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
index 12784adebe36..cd530b9a00ca 100644
@@ -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
index 6a6503ab0cd7..1328dadcfc29 100644
@@ -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
index bdc777b9ec4a..8828d854e34f 100644
@@ -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
index df49ca2e8c23..6d86f4d56353 100644
@@ -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
index e33e5e13b95f..16769c22c070 100644
@@ -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
index 8c0bfc9a33b1..9cd3adfd2a42 100644
@@ -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
index 5a27fd533fab..035e627f94f6 100644
@@ -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
index d7779a18b24f..5a4054f17cbc 100644
@@ -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.
  */
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

include/linux/dsa/ocelot.h +1 -0
index 6fbfbde68a37..620a3260fc08 100644

Lines of this file are not shown. View the raw message.

include/linux/static_call.h +6 -0
index 141e6b176a1b..78a77a4ae0ea 100644

Lines of this file are not shown. View the raw message.

include/net/bluetooth/bluetooth.h +1 -0
index 4763a47bf8c8..c25f9f4cac80 100644

Lines of this file are not shown. View the raw message.

include/net/bluetooth/hci_core.h +24 -0
index 4185eb679180..e9214ccfde2d 100644

Lines of this file are not shown. View the raw message.

include/net/lapb.h +1 -1
index 124ee122f2c8..6c07420644e4 100644

Lines of this file are not shown. View the raw message.

include/net/net_namespace.h +1 -0
index eb6cd43b1746..958c805df191 100644

Lines of this file are not shown. View the raw message.

include/net/netfilter/nf_tables.h +0 -4
index 804dcd3a7d8f..b5f9ee5810a3 100644

Lines of this file are not shown. View the raw message.

include/soc/mscc/ocelot.h +0 -2
index 846132ca5503..51d3e9ec5aa3 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/btf.c +6 -0
index c8828016a66f..14361b3b9edd 100644

Lines of this file are not shown. View the raw message.

kernel/bpf/verifier.c +4 -1
index 3f47cfa17141..a3c3c66ca047 100644

Lines of this file are not shown. View the raw message.

kernel/static_call_inline.c +1 -1
index 5259cda486d0..bb7d066a7c39 100644

Lines of this file are not shown. View the raw message.

kernel/trace/bpf_trace.c +11 -0
index e8fb6ada323c..aab43ba3daeb 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace_kprobe.c +1 -1
index 12d997bb3e78..94cb09d44115 100644

Lines of this file are not shown. View the raw message.

kernel/trace/trace_uprobe.c +5 -1
index 3e7d92d2650b..79f8da7e3cd4 100644

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/hci_conn.c +30 -2
index 35d739988ce3..6178ae8feafc 100644

Lines of this file are not shown. View the raw message.

net/bluetooth/hci_event.c +11 -22
index 141b4fce55e3..01e51e1dc9b3 100644

Lines of this file are not shown. View the raw message.

net/bluetooth/iso.c +83 -4

87 lines not on this page · raw message

net/bluetooth/sco.c +15 -14
index fb368540139a..64d4d57c7033 100644

Lines of this file are not shown. View the raw message.

net/core/net_namespace.c +19 -1
index 018e213185a1..92b7fea4d495 100644

Lines of this file are not shown. View the raw message.

net/core/sock_map.c +3 -3
index 2da881a8e798..f37a26efdd8a 100644

Lines of this file are not shown. View the raw message.

net/ipv4/tcp_output.c +4 -2
index 328640d9b607..cfddc94508f0 100644

Lines of this file are not shown. View the raw message.

net/mac80211/cfg.c +6 -5
index 3da30c991de8..a3c5d4d995db 100644

Lines of this file are not shown. View the raw message.

net/netfilter/nf_tables_api.c +15 -17
index eee7997048fb..a110aad45fe4 100644

Lines of this file are not shown. View the raw message.

net/netfilter/xt_IDLETIMER.c +28 -24

52 lines not on this page · raw message

net/sched/sch_netem.c +16 -6
index d36eeb7b0502..152dbbe8fd31 100644

Lines of this file are not shown. View the raw message.

net/tipc/udp_media.c +6 -1
index 70a39e29a635..b16ca400ff55 100644

Lines of this file are not shown. View the raw message.

net/unix/af_unix.c +1 -0
index dca4429014db..ab23c8d72122 100644

Lines of this file are not shown. View the raw message.

net/wireless/nl80211.c +1 -1
index 797907303669..5b9f39d93b04 100644

Lines of this file are not shown. View the raw message.

net/wireless/sme.c +1 -0
index 591cda99d72f..70881782c25c 100644

Lines of this file are not shown. View the raw message.

sound/core/control_led.c +10 -4
index a78eb48927c7..ba984ed00972 100644

Lines of this file are not shown. View the raw message.

sound/soc/amd/yc/acp6x-mach.c +9 -4
index 39f151d073a6..f7fbde1bc2ed 100644

Lines of this file are not shown. View the raw message.

sound/usb/quirks.c +29 -15

44 lines not on this page · raw message

tools/objtool/check.c +6 -3
index e3fc263b1b20..1b242c3c2d45 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/arm64/abi/syscall-abi-asm.S +15 -17
index df3230fdac39..66ab2e0bae5f 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/bpf/Makefile +14 -5
index f5a3a84fac95..4e569d155da5 100644

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
index a570e48b917a..bfc3bf18fed4 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/bpf/progs/verifier_d_path.c +2 -2
index ec79cbcfde91..87e51a215558 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/bpf/progs/verifier_scalar_ids.c +0 -16
index d24d3a36ec14..22a6cf6e8255 100644

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

tools/tracing/rtla/src/timerlat_hist.c +6 -6
index 1c8ecd4ebcbd..667f12f2d67f 100644

Lines of this file are not shown. View the raw message.

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.