Linux 6.1.131
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.1.131 kernel.
All users of the 6.1 kernel series must upgrade.
The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.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
------------
Makefile | 7 arch/loongarch/kernel/machine_kexec.c | 4 arch/powerpc/kvm/e500_mmu_host.c | 21 + arch/s390/kernel/traps.c | 6 arch/x86/include/asm/spec-ctrl.h | 11 arch/x86/kernel/amd_nb.c | 9 arch/x86/kernel/cpu/bugs.c | 2 arch/x86/kernel/cpu/cacheinfo.c | 2 arch/x86/kernel/cpu/intel.c | 52 +++- arch/x86/kernel/cpu/sgx/ioctl.c | 7 arch/x86/kvm/svm/svm.c | 12 + arch/x86/kvm/svm/svm.h | 2 arch/x86/mm/init.c | 23 + block/partitions/efi.c | 2 drivers/base/core.c | 1 drivers/block/ublk_drv.c | 7 drivers/bluetooth/btusb.c | 1 drivers/bus/mhi/host/pci_generic.c | 5 drivers/gpio/gpio-aggregator.c | 20 + drivers/gpio/gpio-rcar.c | 31 +- drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 11 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 3 drivers/gpu/drm/radeon/r300.c | 3 drivers/gpu/drm/radeon/radeon_asic.h | 1 drivers/gpu/drm/radeon/rs400.c | 18 + drivers/gpu/drm/scheduler/gpu_scheduler_trace.h | 4 drivers/hid/hid-appleir.c | 2 drivers/hid/hid-google-hammer.c | 2 drivers/hid/intel-ish-hid/ishtp-hid.c | 4 drivers/hwmon/ad7314.c | 10 drivers/hwmon/ntc_thermistor.c | 66 ++--- drivers/hwmon/pmbus/pmbus.c | 2 drivers/hwmon/xgene-hwmon.c | 2 drivers/hwtracing/intel_th/pci.c | 15 + drivers/idle/intel_idle.c | 4 drivers/iio/adc/at91-sama5d2_adc.c | 68 +++-- drivers/iio/dac/ad3552r.c | 6 drivers/iio/filter/admv8818.c | 14 - drivers/media/platform/mediatek/vcodec/vdec_vpu_if.c | 6 drivers/misc/cardreader/rtsx_usb.c | 15 - drivers/misc/eeprom/digsy_mtc_eeprom.c | 2 drivers/misc/mei/hw-me-regs.h | 2 drivers/misc/mei/pci-me.c | 2 drivers/net/caif/caif_virtio.c | 2 drivers/net/ethernet/emulex/benet/be.h | 2 drivers/net/ethernet/emulex/benet/be_cmds.c | 197 ++++++++--------- drivers/net/ethernet/emulex/benet/be_main.c | 2 drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c | 2 drivers/net/ethernet/ibm/ibmvnic.c | 21 + drivers/net/ppp/ppp_generic.c | 28 +- drivers/net/wireless/intel/iwlwifi/iwl-drv.c | 2 drivers/nvme/target/tcp.c | 15 - drivers/of/of_reserved_mem.c | 4 drivers/platform/x86/thinkpad_acpi.c | 1 drivers/rapidio/devices/rio_mport_cdev.c | 3 drivers/rapidio/rio-scan.c | 5 drivers/scsi/lpfc/lpfc_hbadisc.c | 2 drivers/slimbus/messaging.c | 5 drivers/spi/spi-mxs.c | 3 drivers/usb/atm/cxacru.c | 13 - drivers/usb/core/hub.c | 33 ++ drivers/usb/core/quirks.c | 4 drivers/usb/dwc3/core.c | 85 ++++--- drivers/usb/dwc3/core.h | 2 drivers/usb/dwc3/drd.c | 4 drivers/usb/dwc3/gadget.c | 10 drivers/usb/gadget/composite.c | 17 + drivers/usb/host/xhci-mem.c | 3 drivers/usb/host/xhci-pci.c | 18 - drivers/usb/host/xhci.h | 2 drivers/usb/renesas_usbhs/common.c | 6 drivers/usb/renesas_usbhs/mod_gadget.c | 2 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 11 drivers/usb/typec/ucsi/ucsi.c | 2 drivers/virt/acrn/hsm.c | 6 fs/exfat/balloc.c | 10 fs/exfat/exfat_fs.h | 2 fs/exfat/fatent.c | 11 fs/nilfs2/dir.c | 24 -- fs/nilfs2/namei.c | 37 +-- fs/nilfs2/nilfs.h | 10 fs/ntfs3/record.c | 3 fs/smb/server/smb2pdu.c | 8 fs/smb/server/transport_ipc.c | 1 kernel/events/uprobes.c | 2 kernel/sched/fair.c | 6 mm/kmsan/hooks.c | 1 mm/memory.c | 6 mm/page_alloc.c | 1 mm/vmalloc.c | 4 net/8021q/vlan.c | 3 net/bluetooth/mgmt.c | 5 net/ipv4/tcp_offload.c | 11 net/ipv4/udp_offload.c | 8 net/ipv6/ila/ila_lwt.c | 4 net/llc/llc_s_ac.c | 49 ++-- net/mptcp/pm_netlink.c | 18 + net/vmw_vsock/af_vsock.c | 77 ++++-- net/wireless/nl80211.c | 5 net/wireless/reg.c | 3 sound/pci/hda/Kconfig | 1 sound/pci/hda/hda_intel.c | 2 sound/pci/hda/patch_realtek.c | 99 ++++++++ sound/usb/usx2y/usbusx2y.c | 11 sound/usb/usx2y/usbusx2y.h | 26 ++ sound/usb/usx2y/usbusx2yaudio.c | 27 -- 106 files changed, 968 insertions(+), 506 deletions(-)
Ahmed S. Darwish (3):
x86/cacheinfo: Validate CPUID leaf 0x2 EDX output
x86/cpu: Validate CPUID leaf 0x2 EDX output
x86/cpu: Properly parse CPUID leaf 0x2 TLB descriptor 0x63Alex Deucher (1):
drm/amdgpu: disable BAR resize on Dell G5 SE
Alexander Shishkin (2):
intel_th: pci: Add Panther Lake-H support
intel_th: pci: Add Panther Lake-P/U support
Alexander Usyskin (1):
mei: me: add panther lake P DID
Andrew Cooper (1):
x86/amd_nb: Use rdmsr_safe() in amd_get_mmconfig_range()
Andy Shevchenko (2):
xhci: pci: Fix indentation in the PCI device ID definitions
eeprom: digsy_mtc: Make GPIO lookup table match the device
Angelo Dureghello (1):
iio: dac: ad3552r: clear reset status flag
AngeloGioacchino Del Regno (1):
usb: typec: tcpci_rt1711h: Unmask alert interrupts to fix functionality
Antoine Tenart (1):
net: gso: fix ownership in __udp_gso_segment
Arnd Bergmann (1):
ALSA: hda: realtek: fix incorrect IS_REACHABLE() usage
Badhri Jagan Sridharan (1):
usb: dwc3: gadget: Prevent irq storm when TH re-executes
Christian Heusel (1):
Revert "drivers/card_reader/rtsx_usb: Restore interrupt based detection"
Claudiu Beznea (3):
usb: renesas_usbhs: Call clk_put()
usb: renesas_usbhs: Use devm_usb_get_phy()
usb: renesas_usbhs: Flush the notify_hotplug_work
Daniil Dulov (1):
HID: appleir: Fix potential NULL dereference at raw event handle
Eric Dumazet (1):
llc: do not use skb_get() before dev_queue_xmit()
Erik Schumacher (1):
hwmon: (ad7314) Validate leading zero bits and return error
Fabrizio Castro (1):
gpio: rcar: Fix missing of_node_put() call
Fedor Pchelkin (1):
usb: typec: ucsi: increase timeout for PPM reset operations
Greg Kroah-Hartman (5):
Revert "KVM: e500: always restore irqs"
Revert "KVM: PPC: e500: Use __kvm_faultin_pfn() to handle page faults" Revert "KVM: PPC: e500: Mark "struct page" pfn accessed before dropping mmu_lock" Revert "KVM: PPC: e500: Mark "struct page" dirty in kvmppc_e500_shadow_map()" Linux 6.1.131
Hao Zhang (1):
mm/page_alloc: fix uninitialized variable
Haoxiang Li (4):
Bluetooth: Add check for mgmt_alloc_skb() in mgmt_remote_name()
Bluetooth: Add check for mgmt_alloc_skb() in mgmt_device_connected()
rapidio: add check for rio_add_net() in rio_scan_alloc_net()
rapidio: fix an API misues when rio_add_net() fails
Haoyu Li (1):
drivers: virt: acrn: hsm: Use kzalloc to avoid info leak in pmcmd_ioctl
Heiko Carstens (1):
s390/traps: Fix test_monitor_call() inline assembly
Hoku Ishibe (1):
ALSA: hda: intel: Add Dell ALC3271 to power_save denylist
Irui Wang (1):
media: mediatek: vcodec: Handle invalid decoder vsi
Jarkko Sakkinen (1):
x86/sgx: Fix size overflows in sgx_encl_create()
Jason Xing (1):
net-timestamp: support TCP GSO case for a few missing flags
Jiayuan Chen (1):
ppp: Fix KMSAN uninit-value warning with bpf
Jiri Olsa (1):
uprobes: Fix race in uprobe_free_utask
Johannes Berg (1):
wifi: iwlwifi: limit printed string from FW file
Justin Iurman (2):
net: ipv6: fix dst ref loop in ila lwtunnel
net: ipv6: fix missing dst ref drop in ila lwtunnel
Kailang Yang (2):
ALSA: hda/realtek - add supported Mic Mute LED for Lenovo platform
ALSA: hda/realtek: update ALC222 depop optimize
Koichiro Den (1):
gpio: aggregator: protect driver attr handlers against module unload
Konstantin Komarov (1):
fs/ntfs3: Add rough attr alloc_size check
Krister Johansen (1):
mptcp: fix 'scheduling while atomic' in mptcp_pm_nl_append_new_local_addr
Luca Ceresoli (1):
drivers: core: fix device leak in __fw_devlink_relax_cycles()
Ma Jun (1):
drm/amdgpu: Check extended configuration space register when system uses large bar
Ma Ke (1):
drm/amd/display: Fix null check for pipe_ctx->plane_state in resource_build_scaling_params
Manivannan Sadhasivam (1):
bus: mhi: host: pci_generic: Use pci_try_reset_function() to avoid deadlock
Marek Szyprowski (1):
usb: gadget: Fix setting self-powered state on suspend
Maud Spierings (1):
hwmon: (ntc_thermistor) Fix the ncpXXxh103 sensor table
Meir Elisha (1):
nvmet-tcp: Fix a possible sporadic response drops in weakly ordered arch
Miao Li (1):
usb: quirks: Add DELAY_INIT and NO_LPM for Prolific Mass Storage Card Reader
Michal Luczaj (3):
bpf, vsock: Invoke proto::close on close()
vsock: Keep the binding until socket destruction
vsock: Orphan socket after transport release
Michal Pecio (1):
usb: xhci: Enable the TRB overfetch quirk on VIA VL805
Mingcong Bai (1):
platform/x86: thinkpad_acpi: Add battery quirk for ThinkPad X131e
Murad Masimov (1):
ALSA: usx2y: validate nrpacks module parameter on probe
Namjae Jeon (4):
ksmbd: fix type confusion via race condition when using ipc_msg_send_request
ksmbd: fix use-after-free in smb2_lock
ksmbd: fix bug on trap in smb2_lock
exfat: fix soft lockup in exfat_clear_bitmap
Nayab Sayed (1):
iio: adc: at91-sama5d2_adc: fix sama7g5 realbits value
Nick Child (2):
ibmvnic: Perform tx CSO during send scrq direct
ibmvnic: Inspect header requirements before using scrq direct
Nikita Zhandarovich (2):
wifi: cfg80211: regulatory: improve invalid hints checking
usb: atm: cxacru: fix a flaw in existing endpoint checks
Niklas Söderlund (1):
gpio: rcar: Use raw_spinlock to protect register access
Nikolay Aleksandrov (1):
be2net: fix sleeping while atomic bugs in be_ndo_bridge_getlink
Olivier Gayot (1):
block: fix conversion of GPT partition name to 7-bit
Oscar Maes (1):
vlan: enforce underlying device type
Pawel Chmielewski (1):
intel_th: pci: Add Arrow Lake support
Pawel Laszczak (1):
usb: hub: lack of clearing xHC resources
Peiyang Wang (1):
net: hns3: make sure ptp clock is unregister and freed if hclge_ptp_get_cycle returns an error
Peter Zijlstra (1):
cpuidle, intel_idle: Fix CPUIDLE_FLAG_IBRS
Philipp Stanner (1):
drm/sched: Fix preprocessor guard
Prashanth K (2):
usb: gadget: Set self-powered based on MaxPower and bmAttributes
usb: gadget: Check bmAttributes only if configuration is valid
Ralf Schlatterbeck (1):
spi-mxs: Fix chipselect glitch
Richard Thier (1):
drm/radeon: Fix rs400_gpu_init for ATI mobility radeon Xpress 200M
Rob Herring (Arm) (1):
Revert "of: reserved-memory: Fix using wrong number of cells to get property 'alignment'"
Ryan Roberts (1):
mm: don't skip arch_sync_kernel_mappings() in error paths
Ryusuke Konishi (3):
nilfs2: move page release outside of nilfs_delete_entry and nilfs_set_link
nilfs2: eliminate staggered calls to kunmap in nilfs_rename
nilfs2: handle errors that nilfs_prepare_chunk() may return
Salah Triki (1):
bluetooth: btusb: Initialize .owner field of force_poll_sync_fops
Sam Winchenbach (1):
iio: filter: admv8818: Force initialization of SDO
Sean Christopherson (1):
KVM: SVM: Drop DEBUGCTL[5:2] from guest's effective value
Sebastian Andrzej Siewior (1):
dma: kmsan: export kmsan_handle_dma() for modules
Thinh Nguyen (1):
usb: dwc3: Set SUSPENDENABLE soon after phy init
Thomas Weißschuh (1):
kbuild: userprogs: use correct lld when linking through clang
Tiezhu Yang (1):
LoongArch: Convert unreachable() to BUG()
Titus Rwantare (1):
hwmon: (pmbus) Initialise page count in pmbus_identify()
Tuo Li (1):
scsi: lpfc: Fix a possible data race in lpfc_unregister_fcf_rescan()
Uday Shankar (1):
ublk: set_params: properly check if parameters can be applied
Visweswara Tanuku (1):
slimbus: messaging: Free transaction ID in delayed interrupt scenario
Vitaliy Shevtsov (2):
wifi: nl80211: reject cooked mode if it is set along with other flags
caif_virtio: fix wrong pointer check in cfv_probe()
Waiman Long (1):
x86/speculation: Add __update_spec_ctrl() helper
Xi Ruoyao (1):
x86/mm: Don't disable PCID when INVLPG has been fixed by microcode
Xinghuo Chen (1):
hwmon: fix a NULL vs IS_ERR_OR_NULL() check in xgene_hwmon_probe()
Yu-Chun Lin (1):
HID: google: fix unused variable warning under !CONFIG_ACPI
Zecheng Li (1):
sched/fair: Fix potential memory corruption in child_cfs_rq_on_list
Zhang Lixu (1):
HID: intel-ish-hid: Fix use-after-free issue in ishtp_hid_remove()
Greg Kroah-Hartman
maintainerMakefile +6 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 1 -SUBLEVEL = 130 +SUBLEVEL = 131 EXTRAVERSION = NAME = Curry Ramen
@@ -1127,6 +1127,11 @@ endif KBUILD_USERCFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS)) KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CFLAGS)) +# userspace programs are linked via the compiler, use the correct linker +ifeq ($(CONFIG_CC_IS_CLANG)$(CONFIG_LD_IS_LLD),yy) +KBUILD_USERLDFLAGS += $(call cc-option, --ld-path=$(LD)) +endif + # make the checker run with the right architecture CHECKFLAGS += --arch=$(ARCH)
arch/loongarch/kernel/machine_kexec.c +2 -2
@@ -126,14 +126,14 @@ void kexec_reboot(void)/* All secondary cpus go to kexec_smp_wait */ if (smp_processor_id () >0 ) {relocated_kexec_smp_wait (NULL ); -unreachable (); +BUG (); }#endif do_kexec = (void *)reboot_code_buffer;do_kexec (efi_boot, cmdline_ptr, systable_ptr, start_addr, first_ind_entry); -unreachable (); +BUG (); }
arch/powerpc/kvm/e500_mmu_host.c +13 -8
@@ -242,7 +242,7 @@ static inline int tlbe_is_writable(struct kvm_book3e_206_tlb_entry *tlbe)return tlbe->mas7_3 & (MAS3_SW |MAS3_UW ); } -static inline bool kvmppc_e500_ref_setup (struct tlbe_ref *ref, +static inline void kvmppc_e500_ref_setup (struct tlbe_ref *ref,struct kvm_book3e_206_tlb_entry *gtlbe,kvm_pfn_t pfn,unsigned int wimg) {
@@ -252,7 +252,11 @@ static inline bool kvmppc_e500_ref_setup(struct tlbe_ref *ref,/* Use guest supplied MAS2_G and MAS2_E */ ref->flags |= (gtlbe->mas2 &MAS2_ATTRIB_MASK ) | wimg; -return tlbe_is_writable (gtlbe); +/* Mark the page accessed */ +kvm_set_pfn_accessed (pfn); + +if (tlbe_is_writable (gtlbe)) +kvm_set_pfn_dirty (pfn); }static inline void kvmppc_e500_ref_release (struct tlbe_ref *ref)
@@ -322,7 +326,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, {struct kvm_memory_slot *slot;unsigned long pfn =0 ;/* silence GCC warning */ -struct page *page =NULL ;unsigned long hva;int pfnmap =0 ;int tsize =BOOK3E_PAGESZ_4K ;
@@ -334,7 +337,6 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,unsigned int wimg =0 ;pgd_t *pgdir;unsigned long flags; -bool writable = false;/* used to check for invalidations in progress */ mmu_seq = kvm->mmu_invalidate_seq;
@@ -444,7 +446,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,if (likely (!pfnmap)) { tsize_pages =1UL << (tsize +10 -PAGE_SHIFT ); - pfn =__kvm_faultin_pfn (slot, gfn,FOLL_WRITE ,NULL , &page); + pfn =gfn_to_pfn_memslot (slot, gfn);if (is_error_noslot_pfn (pfn)) {if (printk_ratelimit ()) pr_err("%s: real page not found for gfn %lx\n",
@@ -479,6 +481,7 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,if (pte_present (pte)) { wimg = (pte_val (pte) >>PTE_WIMGE_SHIFT ) &MAS2_WIMGE_MASK ; +local_irq_restore (flags); }else {local_irq_restore (flags); pr_err_ratelimited("%s: pte not present: gfn %lx,pfn %lx\n",
@@ -487,9 +490,8 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500, goto out; } } -local_irq_restore (flags); +kvmppc_e500_ref_setup (ref, gtlbe, pfn, wimg); - writable =kvmppc_e500_ref_setup (ref, gtlbe, pfn, wimg);kvmppc_e500_setup_stlbe (&vcpu_e500->vcpu, gtlbe, tsize, ref, gvaddr, stlbe);
@@ -497,8 +499,11 @@ static inline int kvmppc_e500_shadow_map(struct kvmppc_vcpu_e500 *vcpu_e500,kvmppc_mmu_flush_icache (pfn); out: -kvm_release_faultin_page (kvm, page, !!ret, writable);spin_unlock (&kvm->mmu_lock); + +/* Drop refcount on page, so that mmu notifiers can clear it */ +kvm_release_pfn_clean (pfn); +return ret; }
arch/s390/kernel/traps.c +3 -3
@@ -276,10 +276,10 @@ static void __init test_monitor_call(void)return ; asmvolatile (" mc 0,0\n" -"0: xgr %0,%0\n" +"0: lhi %[val],0\n" "1:\n" - EX_TABLE(0b,1b) - : "+d" (val)); + EX_TABLE(0b, 1b) + : [val] "+d" (val)); if (!val)panic ("Monitor call doesn't work!\n" ); }
arch/x86/include/asm/spec-ctrl.h +11 -0
@@ -4,6 +4,7 @@#include <linux/thread_info.h> #include <asm/nospec-branch.h> +#include <asm/msr.h> /* * On VMENTER we must preserve whatever view of the SPEC_CTRL MSR
@@ -76,6 +77,16 @@ static inline u64 ssbd_tif_to_amd_ls_cfg(u64 tifn)return (tifn & _TIF_SSBD) ? x86_amd_ls_cfg_ssbd_mask :0ULL ; } +/* +* This can be used in noinstr functions & should only be called in bare +* metal context. +*/ +static __always_inline void __update_spec_ctrl(u64 val) +{ +__this_cpu_write (x86_spec_ctrl_current, val); +native_wrmsrl (MSR_IA32_SPEC_CTRL , val); +} +#ifdef CONFIG_SMP extern void speculative_store_bypass_ht_init (void );#else
arch/x86/kernel/amd_nb.c +3 -6
@@ -342,7 +342,6 @@ bool __init early_is_amd_nb(u32 device)struct resource *amd_get_mmconfig_range (struct resource *res) { -u32 address;u64 base, msr;unsigned int segn_busn_bits;
@@ -350,13 +349,11 @@ struct resource *amd_get_mmconfig_range(struct resource *res) boot_cpu_data.x86_vendor != X86_VENDOR_HYGON)return NULL ; -/* assume all cpus from fam10h have mmconfig */ -if (boot_cpu_data.x86 <0x10 ) +/* Assume CPUs from Fam10h have mmconfig, although not all VMs do */ +if (boot_cpu_data.x86 <0x10 || +rdmsrl_safe (MSR_FAM10H_MMIO_CONF_BASE , &msr))return NULL ; - address =MSR_FAM10H_MMIO_CONF_BASE ; -rdmsrl (address, msr); -/* mmconfig is not enabled */ if (!(msr &FAM10H_MMIO_CONF_ENABLE ))return NULL ;
arch/x86/kernel/cpu/bugs.c +1 -1
@@ -92,7 +92,7 @@ void update_spec_ctrl_cond(u64 val)wrmsrl (MSR_IA32_SPEC_CTRL , val); } -u64 spec_ctrl_current (void ) +noinstr u64 spec_ctrl_current(void) {return this_cpu_read (x86_spec_ctrl_current); }
arch/x86/kernel/cpu/cacheinfo.c +1 -1
@@ -801,7 +801,7 @@ void init_intel_cacheinfo(struct cpuinfo_x86 *c)cpuid (2 , ®s[0 ], ®s[1 ], ®s[2 ], ®s[3 ]);/* If bit 31 is set, this is an unknown format */ -for (j =0 ; j <3 ; j++) +for (j =0 ; j <4 ; j++)if (regs[j] & (1 <<31 )) regs[j] =0 ;
arch/x86/kernel/cpu/intel.c +35 -17
81 lines not on this page · raw message
arch/x86/kernel/cpu/sgx/ioctl.c +7 -0
@@ -64,6 +64,13 @@ static int sgx_encl_create(struct sgx_encl *encl, struct sgx_secs *secs)struct file *backing;long ret; +/* +* ECREATE would detect this too, but checking here also ensures +* that the 'encl_size' calculations below can never overflow. +*/ +if (!is_power_of_2 (secs->size)) +return -EINVAL ; + va_page =sgx_encl_grow (encl, true);if (IS_ERR (va_page))return PTR_ERR (va_page);
arch/x86/kvm/svm/svm.c +12 -0
@@ -3039,6 +3039,18 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr) __func__, data);break ; } + +/* +* AMD changed the architectural behavior of bits 5:2. On CPUs +* without BusLockTrap, bits 5:2 control "external pins", but +* on CPUs that support BusLockDetect, bit 2 enables BusLockTrap +* and bits 5:3 are reserved-to-zero. Sadly, old KVM allowed +* the guest to set bits 5:2 despite not actually virtualizing +* Performance-Monitoring/Breakpoint external pins. Drop bits +* 5:2 for backwards compatibility. +*/ + data &= ~GENMASK (5 ,2 ); +if (data &DEBUGCTL_RESERVED_BITS )return 1 ;
arch/x86/kvm/svm/svm.h +1 -1
@@ -539,7 +539,7 @@ static inline bool is_x2apic_msrpm_offset(u32 offset)/* svm.c */ #define MSR_INVALID 0xffffffffU -#define DEBUGCTL_RESERVED_BITS (~(0x3fULL)) +#define DEBUGCTL_RESERVED_BITS (~(DEBUGCTLMSR_BTF | DEBUGCTLMSR_LBR))extern bool dump_invalid_vmcb;
arch/x86/mm/init.c +14 -9
@@ -263,28 +263,33 @@ static void __init probe_page_size_mask(void) }/* -* INVLPG may not properly flush Global entries -* on these CPUs when PCIDs are enabled. +* INVLPG may not properly flush Global entries on +* these CPUs. New microcode fixes the issue. */ static const struct x86_cpu_id invlpg_miss_ids[] = { -X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE ,0 ), -X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_L ,0 ), -X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_N ,0 ), -X86_MATCH_INTEL_FAM6_MODEL (RAPTORLAKE ,0 ), -X86_MATCH_INTEL_FAM6_MODEL (RAPTORLAKE_P ,0 ), -X86_MATCH_INTEL_FAM6_MODEL (RAPTORLAKE_S ,0 ), +X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE ,0x2e ), +X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_L ,0x42c ), +X86_MATCH_INTEL_FAM6_MODEL (ALDERLAKE_N ,0x11 ), +X86_MATCH_INTEL_FAM6_MODEL (RAPTORLAKE ,0x118 ), +X86_MATCH_INTEL_FAM6_MODEL (RAPTORLAKE_P ,0x4117 ), +X86_MATCH_INTEL_FAM6_MODEL (RAPTORLAKE_S ,0x2e ), {} };static void setup_pcid (void ) { +const struct x86_cpu_id *invlpg_miss_match; +if (!IS_ENABLED (CONFIG_X86_64 ))return ;if (!boot_cpu_has (X86_FEATURE_PCID ))return ; -if (x86_match_cpu (invlpg_miss_ids)) { + invlpg_miss_match =x86_match_cpu (invlpg_miss_ids); + +if (invlpg_miss_match && + boot_cpu_data.microcode < invlpg_miss_match->driver_data) {pr_info ("Incomplete global flushes, disabling PCID" );setup_clear_cpu_cap (X86_FEATURE_PCID );return ;
block/partitions/efi.c +1 -1
@@ -682,7 +682,7 @@ static void utf16_le_to_7bit(const __le16 *in, unsigned int size, u8 *out) out[size] =0 ;while (i < size) { -u8 c =le16_to_cpu (in[i]) &0xff ; +u8 c =le16_to_cpu (in[i]) &0x7f ;if (c && !isprint (c)) c ='!' ;
drivers/base/core.c +1 -0
@@ -2023,6 +2023,7 @@ static bool __fw_devlink_relax_cycles(struct fwnode_handle *con_handle, out: sup_handle->flags &= ~FWNODE_FLAG_VISITED ;put_device (sup_dev); +put_device (con_dev);put_device (par_dev);return ret; }
drivers/block/ublk_drv.c +5 -2
@@ -1873,9 +1873,12 @@ static int ublk_ctrl_set_params(struct ublk_device *ub,if (ph.len >sizeof (struct ublk_params )) ph.len =sizeof (struct ublk_params ); -/* parameters can only be changed when device isn't live */ mutex_lock (&ub->mutex); -if (ub->dev_info.state ==UBLK_S_DEV_LIVE ) { +if (test_bit (UB_STATE_USED , &ub->state)) { +/* +* Parameters can only be changed when device hasn't +* been started yet +*/ ret = -EACCES ; }else if (copy_from_user (&ub->params, argp, ph.len)) { ret = -EFAULT ;
drivers/bluetooth/btusb.c +1 -0
@@ -3769,6 +3769,7 @@ static ssize_t force_poll_sync_write(struct file *file, }static const struct file_operations force_poll_sync_fops = { + .owner =THIS_MODULE , .open = simple_open, .read = force_poll_sync_read, .write = force_poll_sync_write,
drivers/bus/mhi/host/pci_generic.c +3 -2
@@ -824,8 +824,9 @@ static void mhi_pci_recovery_work(struct work_struct *work) err_unprepare:mhi_unprepare_after_power_down (mhi_cntrl); err_try_reset: -if (pci_reset_function (pdev)) -dev_err (&pdev->dev,"Recovery failed\n" ); + err =pci_try_reset_function (pdev); +if (err) +dev_err (&pdev->dev,"Recovery failed: %d\n" , err); }static void health_check (struct timer_list *t)
drivers/gpio/gpio-aggregator.c +17 -3
@@ -116,10 +116,15 @@ static ssize_t new_device_store(struct device_driver *driver, const char *buf,struct platform_device *pdev;int res, id; +if (!try_module_get (THIS_MODULE )) +return -ENOENT ; +/* kernfs guarantees string termination, so count + 1 is safe */ aggr =kzalloc (sizeof (*aggr) + count +1 ,GFP_KERNEL ); -if (!aggr) -return -ENOMEM ; +if (!aggr) { + res = -ENOMEM ; + goto put_module; + }memcpy (aggr->args, buf, count +1 );
@@ -158,6 +163,7 @@ static ssize_t new_device_store(struct device_driver *driver, const char *buf, } aggr->pdev = pdev; +module_put (THIS_MODULE );return count; remove_table:
@@ -172,6 +178,8 @@ static ssize_t new_device_store(struct device_driver *driver, const char *buf,kfree (aggr->lookups); free_ga:kfree (aggr); +put_module: +module_put (THIS_MODULE );return res; }
@@ -200,13 +208,19 @@ static ssize_t delete_device_store(struct device_driver *driver,if (error)return error; +if (!try_module_get (THIS_MODULE )) +return -ENOENT ; +mutex_lock (&gpio_aggregator_lock); aggr =idr_remove (&gpio_aggregator_idr, id);mutex_unlock (&gpio_aggregator_lock); -if (!aggr) +if (!aggr) { +module_put (THIS_MODULE );return -ENOENT ; + }gpio_aggregator_free (aggr); +module_put (THIS_MODULE );return count; }static DRIVER_ATTR_WO (delete_device);
drivers/gpio/gpio-rcar.c +18 -13
@@ -41,7 +41,7 @@ struct gpio_rcar_info {struct gpio_rcar_priv {void __iomem *base; -spinlock_t lock; +raw_spinlock_t lock;struct device *dev;struct gpio_chip gpio_chip;unsigned int irq_parent;
@@ -124,7 +124,7 @@ static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p,* "Setting Level-Sensitive Interrupt Input Mode" */ -spin_lock_irqsave (&p->lock, flags); +raw_spin_lock_irqsave (&p->lock, flags);/* Configure positive or negative logic in POSNEG */ gpio_rcar_modify_bit (p,POSNEG , hwirq, !active_high_rising_edge);
@@ -143,7 +143,7 @@ static void gpio_rcar_config_interrupt_input_mode(struct gpio_rcar_priv *p,if (!level_trigger)gpio_rcar_write (p,INTCLR ,BIT (hwirq)); -spin_unlock_irqrestore (&p->lock, flags); +raw_spin_unlock_irqrestore (&p->lock, flags); }static int gpio_rcar_irq_set_type (struct irq_data *d,unsigned int type)
@@ -247,7 +247,7 @@ static void gpio_rcar_config_general_input_output_mode(struct gpio_chip *chip,* "Setting General Input Mode" */ -spin_lock_irqsave (&p->lock, flags); +raw_spin_lock_irqsave (&p->lock, flags);/* Configure positive logic in POSNEG */ gpio_rcar_modify_bit (p,POSNEG , gpio, false);
@@ -262,7 +262,7 @@ static void gpio_rcar_config_general_input_output_mode(struct gpio_chip *chip,if (p->info.has_outdtsel && output)gpio_rcar_modify_bit (p,OUTDTSEL , gpio, false); -spin_unlock_irqrestore (&p->lock, flags); +raw_spin_unlock_irqrestore (&p->lock, flags); }static int gpio_rcar_request (struct gpio_chip *chip,unsigned offset)
@@ -348,7 +348,7 @@ static int gpio_rcar_get_multiple(struct gpio_chip *chip, unsigned long *mask,return 0 ; } -spin_lock_irqsave (&p->lock, flags); +raw_spin_lock_irqsave (&p->lock, flags); outputs =gpio_rcar_read (p,INOUTSEL ); m = outputs & bankmask;if (m)
@@ -357,7 +357,7 @@ static int gpio_rcar_get_multiple(struct gpio_chip *chip, unsigned long *mask, m = ~outputs & bankmask;if (m) val |=gpio_rcar_read (p,INDT ) & m; -spin_unlock_irqrestore (&p->lock, flags); +raw_spin_unlock_irqrestore (&p->lock, flags); bits[0 ] = val;return 0 ;
@@ -368,9 +368,9 @@ static void gpio_rcar_set(struct gpio_chip *chip, unsigned offset, int value)struct gpio_rcar_priv *p =gpiochip_get_data (chip);unsigned long flags; -spin_lock_irqsave (&p->lock, flags); +raw_spin_lock_irqsave (&p->lock, flags);gpio_rcar_modify_bit (p,OUTDT , offset, value); -spin_unlock_irqrestore (&p->lock, flags); +raw_spin_unlock_irqrestore (&p->lock, flags); } static void gpio_rcar_set_multiple(struct gpio_chip *chip, unsigned long *mask,
@@ -387,12 +387,12 @@ static void gpio_rcar_set_multiple(struct gpio_chip *chip, unsigned long *mask,if (!bankmask)return ; -spin_lock_irqsave (&p->lock, flags); +raw_spin_lock_irqsave (&p->lock, flags); val =gpio_rcar_read (p,OUTDT ); val &= ~bankmask; val |= (bankmask & bits[0 ]);gpio_rcar_write (p,OUTDT , val); -spin_unlock_irqrestore (&p->lock, flags); +raw_spin_unlock_irqrestore (&p->lock, flags); } static int gpio_rcar_direction_output(struct gpio_chip *chip, unsigned offset,
@@ -469,7 +469,12 @@ static int gpio_rcar_parse_dt(struct gpio_rcar_priv *p, unsigned int *npins) p->info = *info; ret =of_parse_phandle_with_fixed_args (np,"gpio-ranges" ,3 ,0 , &args); - *npins = ret ==0 ? args.args[2 ] :RCAR_MAX_GPIO_PER_BANK ; +if (ret) { + *npins =RCAR_MAX_GPIO_PER_BANK ; + }else { + *npins = args.args[2 ]; +of_node_put (args.np); + }if (*npins ==0 || *npins >RCAR_MAX_GPIO_PER_BANK ) { dev_warn(p->dev, "Invalid number of gpio lines %u, using %u\n",
@@ -506,7 +511,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)return -ENOMEM ; p->dev = dev; -spin_lock_init (&p->lock); +raw_spin_lock_init (&p->lock);/* Get device configuration from DT node */ ret =gpio_rcar_parse_dt (p, &npins);
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +11 -0
@@ -1220,6 +1220,17 @@ int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev)if (amdgpu_sriov_vf (adev))return 0 ; +/* resizing on Dell G5 SE platforms causes problems with runtime pm */ +if ((amdgpu_runtime_pm !=0 ) && + adev->pdev->vendor ==PCI_VENDOR_ID_ATI && + adev->pdev->device ==0x731f && + adev->pdev->subsystem_vendor ==PCI_VENDOR_ID_DELL ) +return 0 ; + +/* PCI_EXT_CAP_ID_VNDR extended capability is located at 0x100 */ +if (!pci_find_ext_capability (adev->pdev,PCI_EXT_CAP_ID_VNDR )) +DRM_WARN ("System can't access extended configuration space,please check!!\n" ); +/* skip if the bios has already enabled large BAR */ if (adev->gmc.real_vram_size && (pci_resource_len (adev->pdev,0 ) >= adev->gmc.real_vram_size))
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +2 -1
@@ -1100,7 +1100,8 @@ bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx)DC_LOGGER_INIT (pipe_ctx->stream->ctx->logger);/* Invalid input */ -if (!plane_state->dst_rect.width || +if (!plane_state || + !plane_state->dst_rect.width || !plane_state->dst_rect.height || !plane_state->src_rect.width || !plane_state->src_rect.height) {
drivers/gpu/drm/radeon/r300.c +2 -1
@@ -359,7 +359,8 @@ int r300_mc_wait_for_idle(struct radeon_device *rdev)return -1 ; } -static void r300_gpu_init (struct radeon_device *rdev) +/* rs400_gpu_init also calls this! */ +void r300_gpu_init (struct radeon_device *rdev) {uint32_t gb_tile_config, tmp;
drivers/gpu/drm/radeon/radeon_asic.h +1 -0
@@ -165,6 +165,7 @@ void r200_set_safe_registers(struct radeon_device *rdev);*/ extern int r300_init (struct radeon_device *rdev);extern void r300_fini (struct radeon_device *rdev); +extern void r300_gpu_init (struct radeon_device *rdev);extern int r300_suspend (struct radeon_device *rdev);extern int r300_resume (struct radeon_device *rdev);extern int r300_asic_reset (struct radeon_device *rdev,bool hard);
drivers/gpu/drm/radeon/rs400.c +16 -2
@@ -255,8 +255,22 @@ int rs400_mc_wait_for_idle(struct radeon_device *rdev)static void rs400_gpu_init (struct radeon_device *rdev) { -/* FIXME: is this correct ? */ -r420_pipes_init (rdev); +/* Earlier code was calling r420_pipes_init and then +* rs400_mc_wait_for_idle(rdev). The problem is that +* at least on my Mobility Radeon Xpress 200M RC410 card +* that ends up in this code path ends up num_gb_pipes == 3 +* while the card seems to have only one pipe. With the +* r420 pipe initialization method. +* +* Problems shown up as HyperZ glitches, see: +* https://bugs.freedesktop.org/show_bug.cgi?id=110897 +* +* Delegating initialization to r300 code seems to work +* and results in proper pipe numbers. The rs400 cards +* are said to be not r400, but r300 kind of cards. +*/ +r300_gpu_init (rdev); +if (rs400_mc_wait_for_idle (rdev)) {pr_warn ("rs400: Failed to wait MC idle while programming pipes. Bad things might happen. %08x\n" ,RREG32 (RADEON_MC_STATUS ));
drivers/gpu/drm/scheduler/gpu_scheduler_trace.h +2 -2
@@ -21,7 +21,7 @@* */ -#if !defined(_GPU_SCHED_TRACE_H) || defined(TRACE_HEADER_MULTI_READ ) +#if !defined(_GPU_SCHED_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ )#define _GPU_SCHED_TRACE_H_#include <linux/stringify.h>
@@ -106,7 +106,7 @@ TRACE_EVENT(drm_sched_job_wait_dep, __entry->seqno) ); -#endif +#endif /* _GPU_SCHED_TRACE_H_ */ /* This part must be outside protection */ #undef TRACE_INCLUDE_PATH
drivers/hid/hid-appleir.c +1 -1
@@ -188,7 +188,7 @@ static int appleir_raw_event(struct hid_device *hid, struct hid_report *report,static const u8 flatbattery[] = {0x25 ,0x87 ,0xe0 };unsigned long flags; -if (len !=5 ) +if (len !=5 || !(hid->claimed &HID_CLAIMED_INPUT )) goto out;if (!memcmp (data, keydown,sizeof (keydown))) {
drivers/hid/hid-google-hammer.c +2 -0
@@ -269,11 +269,13 @@ static int cbas_ec_remove(struct platform_device *pdev)return 0 ; } +#ifdef CONFIG_ACPI static const struct acpi_device_id cbas_ec_acpi_ids[] = { {"GOOG000B" ,0 }, { } };MODULE_DEVICE_TABLE (acpi, cbas_ec_acpi_ids); +#endif #ifdef CONFIG_OF static const struct of_device_id cbas_ec_of_match[] = {
drivers/hid/intel-ish-hid/ishtp-hid.c +3 -1
@@ -261,12 +261,14 @@ int ishtp_hid_probe(unsigned int cur_hid_dev,*/ void ishtp_hid_remove (struct ishtp_cl_data *client_data) { +void *data;int i;for (i =0 ; i < client_data->num_hid_devices; ++i) {if (client_data->hid_sensor_hubs[i]) { -kfree (client_data->hid_sensor_hubs[i]->driver_data); + data = client_data->hid_sensor_hubs[i]->driver_data;hid_destroy_device (client_data->hid_sensor_hubs[i]); +kfree (data); client_data->hid_sensor_hubs[i] =NULL ; } }
drivers/hwmon/ad7314.c +10 -0
@@ -22,11 +22,13 @@*/ #define AD7314_TEMP_MASK 0x7FE0#define AD7314_TEMP_SHIFT 5 +#define AD7314_LEADING_ZEROS_MASK BIT(15)/* * ADT7301 and ADT7302 temperature masks */ #define ADT7301_TEMP_MASK 0x3FFF +#define ADT7301_LEADING_ZEROS_MASK (BIT(15) | BIT(14))enum ad7314_variant { adt7301,
@@ -65,12 +67,20 @@ static ssize_t ad7314_temperature_show(struct device *dev,return ret;switch (spi_get_device_id (chip->spi_dev)->driver_data) {case ad7314: +if (ret &AD7314_LEADING_ZEROS_MASK ) { +/* Invalid read-out, leading zero part is missing */ +return -EIO ; + } data = (ret &AD7314_TEMP_MASK ) >>AD7314_TEMP_SHIFT ; data =sign_extend32 (data,9 );return sprintf (buf,"%d\n" ,250 * data);case adt7301:case adt7302: +if (ret &ADT7301_LEADING_ZEROS_MASK ) { +/* Invalid read-out, leading zero part is missing */ +return -EIO ; + }/* * Documented as a 13 bit twos complement register * with a sign bit - which is a 14 bit 2's complement
drivers/hwmon/ntc_thermistor.c +33 -33
73 lines not on this page · raw message
drivers/hwmon/pmbus/pmbus.c +2 -0
@@ -103,6 +103,8 @@ static int pmbus_identify(struct i2c_client *client,if (pmbus_check_byte_register (client,0 ,PMBUS_PAGE )) {int page; + info->pages =PMBUS_PAGES ; +for (page =1 ; page <PMBUS_PAGES ; page++) {if (pmbus_set_page (client, page,0xff ) <0 )break ;
drivers/hwmon/xgene-hwmon.c +1 -1
@@ -712,7 +712,7 @@ static int xgene_hwmon_probe(struct platform_device *pdev) goto out; } -if (!ctx->pcc_comm_addr) { +if (IS_ERR_OR_NULL (ctx->pcc_comm_addr)) {dev_err (&pdev->dev,"Failed to ioremap PCC comm region\n" ); rc = -ENOMEM ;
drivers/hwtracing/intel_th/pci.c +15 -0
@@ -329,6 +329,21 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa824), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { +/* Arrow Lake */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0x7724 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { +/* Panther Lake-H */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0xe324 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { +/* Panther Lake-P/U */ +PCI_DEVICE (PCI_VENDOR_ID_INTEL ,0xe424 ), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, {/* Alder Lake CPU */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x466f),
drivers/idle/intel_idle.c +2 -2
@@ -188,12 +188,12 @@ static __cpuidle int intel_idle_ibrs(struct cpuidle_device *dev,int ret;if (smt_active) -wrmsrl (MSR_IA32_SPEC_CTRL ,0 ); +native_wrmsrl (MSR_IA32_SPEC_CTRL ,0 ); ret =__intel_idle (dev, drv, index);if (smt_active) -wrmsrl (MSR_IA32_SPEC_CTRL , spec_ctrl); +native_wrmsrl (MSR_IA32_SPEC_CTRL , spec_ctrl);return ret; }
drivers/iio/adc/at91-sama5d2_adc.c +40 -28
104 lines not on this page · raw message
drivers/iio/dac/ad3552r.c +6 -0
@@ -703,6 +703,12 @@ static int ad3552r_reset(struct ad3552r_desc *dac)return ret; } +/* Clear reset error flag, see ad3552r manual, rev B table 38. */ + ret =ad3552r_write_reg (dac,AD3552R_REG_ADDR_ERR_STATUS , +AD3552R_MASK_RESET_STATUS ); +if (ret) +return ret; + return ad3552r_update_reg_field(dac, addr_mask_map[AD3552R_ADDR_ASCENSION][0], addr_mask_map[AD3552R_ADDR_ASCENSION][1],
drivers/iio/filter/admv8818.c +4 -10
@@ -527,21 +527,15 @@ static int admv8818_init(struct admv8818_state *st)struct spi_device *spi = st->spi;unsigned int chip_id; - ret =regmap_update_bits (st->regmap,ADMV8818_REG_SPI_CONFIG_A , -ADMV8818_SOFTRESET_N_MSK | -ADMV8818_SOFTRESET_MSK , -FIELD_PREP (ADMV8818_SOFTRESET_N_MSK ,1 ) | -FIELD_PREP (ADMV8818_SOFTRESET_MSK ,1 )); + ret =regmap_write (st->regmap,ADMV8818_REG_SPI_CONFIG_A , +ADMV8818_SOFTRESET_N_MSK |ADMV8818_SOFTRESET_MSK );if (ret) {dev_err (&spi->dev,"ADMV8818 Soft Reset failed.\n" );return ret; } - ret =regmap_update_bits (st->regmap,ADMV8818_REG_SPI_CONFIG_A , -ADMV8818_SDOACTIVE_N_MSK | -ADMV8818_SDOACTIVE_MSK , -FIELD_PREP (ADMV8818_SDOACTIVE_N_MSK ,1 ) | -FIELD_PREP (ADMV8818_SDOACTIVE_MSK ,1 )); + ret =regmap_write (st->regmap,ADMV8818_REG_SPI_CONFIG_A , +ADMV8818_SDOACTIVE_N_MSK |ADMV8818_SDOACTIVE_MSK );if (ret) {dev_err (&spi->dev,"ADMV8818 SDO Enable failed.\n" );return ret;
drivers/media/platform/mediatek/vcodec/vdec_vpu_if.c +6 -0
@@ -213,6 +213,12 @@ int vpu_dec_init(struct vdec_vpu_inst *vpu)mtk_vcodec_debug (vpu,"vdec_inst=%p" , vpu); err =vcodec_vpu_send_msg (vpu, (void *)&msg,sizeof (msg)); + +if (IS_ERR_OR_NULL (vpu->vsi)) { +mtk_vcodec_err (vpu,"invalid vdec vsi, status=%d" , err); +return -EINVAL ; + } +mtk_vcodec_debug (vpu,"- ret=%d" , err);return err; }
drivers/misc/cardreader/rtsx_usb.c +0 -15
@@ -286,7 +286,6 @@ static int rtsx_usb_get_status_with_bulk(struct rtsx_ucr *ucr, u16 *status)int rtsx_usb_get_card_status (struct rtsx_ucr *ucr,u16 *status) {int ret; -u8 interrupt_val =0 ;u16 *buf;if (!status)
@@ -309,20 +308,6 @@ int rtsx_usb_get_card_status(struct rtsx_ucr *ucr, u16 *status) ret =rtsx_usb_get_status_with_bulk (ucr, status); } -rtsx_usb_read_register (ucr,CARD_INT_PEND , &interrupt_val); -/* Cross check presence with interrupts */ -if (*status &XD_CD ) -if (!(interrupt_val &XD_INT )) - *status &= ~XD_CD ; - -if (*status &SD_CD ) -if (!(interrupt_val &SD_INT )) - *status &= ~SD_CD ; - -if (*status &MS_CD ) -if (!(interrupt_val &MS_INT )) - *status &= ~MS_CD ; -/* usb_control_msg may return positive when success */ if (ret <0 )return ret;
drivers/misc/eeprom/digsy_mtc_eeprom.c +1 -1
@@ -60,7 +60,7 @@ static struct platform_device digsy_mtc_eeprom = { };static struct gpiod_lookup_table eeprom_spi_gpiod_table = { - .dev_id ="spi_gpio" , + .dev_id ="spi_gpio.1" , .table = {GPIO_LOOKUP ("gpio@b00" ,GPIO_EEPROM_CLK ,"sck" ,GPIO_ACTIVE_HIGH ),
drivers/misc/mei/hw-me-regs.h +2 -0
@@ -117,6 +117,8 @@#define MEI_DEV_ID_LNL_M 0xA870/* Lunar Lake Point M */ +#define MEI_DEV_ID_PTL_P 0xE470/* Panther Lake P */ +/* * MEI HW Section */
drivers/misc/mei/pci-me.c +2 -0
@@ -124,6 +124,8 @@ static const struct pci_device_id mei_me_pci_tbl[] = { {MEI_PCI_DEVICE(MEI_DEV_ID_LNL_M, MEI_ME_PCH15_CFG)}, + {MEI_PCI_DEVICE(MEI_DEV_ID_PTL_P, MEI_ME_PCH15_CFG)}, +/* required last entry */ {0, } };
drivers/net/caif/caif_virtio.c +1 -1
@@ -745,7 +745,7 @@ static int cfv_probe(struct virtio_device *vdev)if (cfv->vr_rx) vdev->vringh_config->del_vrhs (cfv->vdev); -if (cfv->vdev) +if (cfv->vq_tx) vdev->config->del_vqs (cfv->vdev);free_netdev (netdev);return err;
drivers/net/ethernet/emulex/benet/be.h +1 -1
@@ -562,7 +562,7 @@ struct be_adapter {struct be_dma_mem mbox_mem_alloced;struct be_mcc_obj mcc_obj; -struct mutex mcc_lock;/* For serializing mcc cmds to BE card */ +spinlock_t mcc_lock;/* For serializing mcc cmds to BE card */ spinlock_t mcc_cq_lock;u16 cfg_num_rx_irqs;/* configured via set-channels */
drivers/net/ethernet/emulex/benet/be_cmds.c +98 -99
787 lines not on this page · raw message
drivers/net/ethernet/emulex/benet/be_main.c +1 -1
@@ -5672,8 +5672,8 @@ static int be_drv_init(struct be_adapter *adapter) }mutex_init (&adapter->mbox_lock); -mutex_init (&adapter->mcc_lock);mutex_init (&adapter->rx_filter_lock); +spin_lock_init (&adapter->mcc_lock);spin_lock_init (&adapter->mcc_cq_lock);init_completion (&adapter->et_cmd_compl);
drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_ptp.c +1 -1
@@ -496,7 +496,7 @@ int hclge_ptp_init(struct hclge_dev *hdev) ret =hclge_ptp_get_cycle (hdev);if (ret) -return ret; + goto out; } ret =hclge_ptp_int_en (hdev, true);
drivers/net/ethernet/ibm/ibmvnic.c +19 -2
@@ -2237,6 +2237,7 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)unsigned int skblen;union sub_crq tx_crq;unsigned int offset; +bool use_scrq_send_direct = false;int num_entries =1 ;unsigned char *dst;int bufidx =0 ;
@@ -2296,6 +2297,20 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)memset (dst,0 , tx_pool->buf_size); data_dma_addr = ltb->addr + offset; +/* if we are going to send_subcrq_direct this then we need to +* update the checksum before copying the data into ltb. Essentially +* these packets force disable CSO so that we can guarantee that +* FW does not need header info and we can send direct. Also, vnic +* server must be able to xmit standard packets without header data +*/ +if (*hdrs ==0 && !skb_is_gso (skb) && + !ind_bufp->index && !netdev_xmit_more ()) { + use_scrq_send_direct = true; +if (skb->ip_summed ==CHECKSUM_PARTIAL && +skb_checksum_help (skb)) + use_scrq_send_direct = false; + } +if (skb_shinfo (skb)->nr_frags) {int cur, i;
@@ -2381,11 +2396,13 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev) tx_crq.v1.flags1 |=IBMVNIC_TX_LSO ; tx_crq.v1.mss =cpu_to_be16 (skb_shinfo (skb)->gso_size); hdrs +=2 ; - }else if (!ind_bufp->index && !netdev_xmit_more ()) { - ind_bufp->indir_arr[0 ] = tx_crq; + }else if (use_scrq_send_direct) { +/* See above comment, CSO disabled with direct xmit */ + tx_crq.v1.flags1 &= ~(IBMVNIC_TX_CHKSUM_OFFLOAD ); ind_bufp->index =1 ; tx_buff->num_entries =1 ;netdev_tx_sent_queue (txq, skb->len); + ind_bufp->indir_arr[0 ] = tx_crq; lpar_rc =ibmvnic_tx_scrq_flush (adapter, tx_scrq, false);if (lpar_rc !=H_SUCCESS ) goto tx_err;
drivers/net/ppp/ppp_generic.c +19 -9
@@ -72,6 +72,17 @@#define PPP_PROTO_LEN 2#define PPP_LCP_HDRLEN 4 +/* The filter instructions generated by libpcap are constructed +* assuming a four-byte PPP header on each packet, where the last +* 2 bytes are the protocol field defined in the RFC and the first +* byte of the first 2 bytes indicates the direction. +* The second byte is currently unused, but we still need to initialize +* it to prevent crafted BPF programs from reading them which would +* cause reading of uninitialized data. +*/ +#define PPP_FILTER_OUTBOUND_TAG 0x0100 +#define PPP_FILTER_INBOUND_TAG 0x0000 +/* * An instance of /dev/ppp can be associated with either a ppp * interface unit or a ppp channel. In both cases, file->private_data
@@ -1762,10 +1773,10 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)if (proto <0x8000 ) {#ifdef CONFIG_PPP_FILTER -/* check if we should pass this packet */ -/* the filter instructions are constructed assuming -a four-byte PPP header on each packet */ - *(u8 *)skb_push (skb,2 ) =1 ; +/* check if the packet passes the pass and active filters. +* See comment for PPP_FILTER_OUTBOUND_TAG above. +*/ + *(__be16 *)skb_push (skb,2 ) =htons (PPP_FILTER_OUTBOUND_TAG );if (ppp->pass_filter &&bpf_prog_run (ppp->pass_filter, skb) ==0 ) {if (ppp->debug &1 )
@@ -2482,14 +2493,13 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb)/* network protocol frame - give it to the kernel */ #ifdef CONFIG_PPP_FILTER -/* check if the packet passes the pass and active filters */ -/* the filter instructions are constructed assuming -a four-byte PPP header on each packet */ if (ppp->pass_filter || ppp->active_filter) {if (skb_unclone (skb,GFP_ATOMIC )) goto err; - - *(u8 *)skb_push (skb,2 ) =0 ; +/* Check if the packet passes the pass and active filters. +* See comment for PPP_FILTER_INBOUND_TAG above. +*/ + *(__be16 *)skb_push (skb,2 ) =htons (PPP_FILTER_INBOUND_TAG );if (ppp->pass_filter &&bpf_prog_run (ppp->pass_filter, skb) ==0 ) {if (ppp->debug &1 )
drivers/net/wireless/intel/iwlwifi/iwl-drv.c +1 -1
@@ -1141,7 +1141,7 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,if (tlv_len !=sizeof (*fseq_ver)) goto invalid_tlv_len; -IWL_INFO (drv,"TLV_FW_FSEQ_VERSION: %s\n" , +IWL_INFO (drv,"TLV_FW_FSEQ_VERSION: %.32s\n" , fseq_ver->version); }break ;
drivers/nvme/target/tcp.c +11 -4
@@ -520,10 +520,16 @@ static void nvmet_tcp_queue_response(struct nvmet_req *req)struct nvmet_tcp_cmd *cmd = container_of(req, struct nvmet_tcp_cmd, req);struct nvmet_tcp_queue *queue = cmd->queue; +enum nvmet_tcp_recv_state queue_state; +struct nvmet_tcp_cmd *queue_cmd;struct nvme_sgl_desc *sgl;u32 len; -if (unlikely (cmd == queue->cmd)) { +/* Pairs with store_release in nvmet_prepare_receive_pdu() */ + queue_state =smp_load_acquire (&queue->rcv_state); + queue_cmd =READ_ONCE (queue->cmd); + +if (unlikely (cmd == queue_cmd)) { sgl = &cmd->req.cmd->common.dptr.sgl; len =le32_to_cpu (sgl->length);
@@ -532,7 +538,7 @@ static void nvmet_tcp_queue_response(struct nvmet_req *req)* Avoid using helpers, this might happen before * nvmet_req_init is completed. */ -if (queue->rcv_state ==NVMET_TCP_RECV_PDU && +if (queue_state ==NVMET_TCP_RECV_PDU && len && len <= cmd->req.port->inline_data_size &&nvme_is_write (cmd->req.cmd))return ;
@@ -784,8 +790,9 @@ static void nvmet_prepare_receive_pdu(struct nvmet_tcp_queue *queue) { queue->offset =0 ; queue->left =sizeof (struct nvme_tcp_hdr ); - queue->cmd =NULL ; - queue->rcv_state =NVMET_TCP_RECV_PDU ; +WRITE_ONCE (queue->cmd,NULL ); +/* Ensure rcv_state is visible only after queue->cmd is set */ +smp_store_release (&queue->rcv_state,NVMET_TCP_RECV_PDU ); }static void nvmet_tcp_free_crypto (struct nvmet_tcp_queue *queue)
drivers/of/of_reserved_mem.c +2 -2
@@ -105,12 +105,12 @@ static int __init __reserved_mem_alloc_size(unsigned long node, prop =of_get_flat_dt_prop (node,"alignment" , &len);if (prop) { -if (len != dt_root_size_cells *sizeof (__be32)) { +if (len != dt_root_addr_cells *sizeof (__be32)) {pr_err ("invalid alignment property in '%s' node.\n" , uname);return -EINVAL ; } - align =dt_mem_next_cell (dt_root_size_cells, &prop); + align =dt_mem_next_cell (dt_root_addr_cells, &prop); } nomap =of_get_flat_dt_prop (node,"no-map" ,NULL ) !=NULL ;
drivers/platform/x86/thinkpad_acpi.c +1 -0
@@ -10113,6 +10113,7 @@ static const struct tpacpi_quirk battery_quirk_table[] __initconst = {* Individual addressing is broken on models that expose the * primary battery as BAT1. */ +TPACPI_Q_LNV ('G' ,'8' , true),/* ThinkPad X131e */ TPACPI_Q_LNV ('8' ,'F' , true),/* Thinkpad X120e */ TPACPI_Q_LNV ('J' ,'7' , true),/* B5400 */ TPACPI_Q_LNV('J', 'I', true), /* Thinkpad 11e */
drivers/rapidio/devices/rio_mport_cdev.c +2 -1
@@ -1740,7 +1740,8 @@ static int rio_mport_add_riodev(struct mport_cdev_priv *priv, err =rio_add_net (net);if (err) {rmcd_debug (RDEV ,"failed to register net, err=%d" , err); -kfree (net); +put_device (&net->dev); + mport->net =NULL ; goto cleanup; } }
drivers/rapidio/rio-scan.c +4 -1
@@ -871,7 +871,10 @@ static struct rio_net *rio_scan_alloc_net(struct rio_mport *mport,dev_set_name (&net->dev,"rnet_%d" , net->id); net->dev.parent = &mport->dev; net->dev.release = rio_scan_release_dev; -rio_add_net (net); +if (rio_add_net (net)) { +put_device (&net->dev); + net =NULL ; + } }return net;
drivers/scsi/lpfc/lpfc_hbadisc.c +2 -0
@@ -6942,7 +6942,9 @@ lpfc_unregister_fcf_rescan(struct lpfc_hba *phba)if (rc)return ;/* Reset HBA FCF states after successful unregister FCF */ +spin_lock_irq (&phba->hbalock); phba->fcf.fcf_flag =0 ; +spin_unlock_irq (&phba->hbalock); phba->fcf.current_rec.flag =0 ;/*
drivers/slimbus/messaging.c +3 -2
@@ -147,8 +147,9 @@ int slim_do_transfer(struct slim_controller *ctrl, struct slim_msg_txn *txn) } ret = ctrl->xfer_msg (ctrl, txn); - -if (!ret && need_tid && !txn->msg->comp) { +if (ret == -ETIMEDOUT ) { +slim_free_txn_tid (ctrl, txn); + }else if (!ret && need_tid && !txn->msg->comp) {unsigned long ms = txn->rl +HZ ; timeout = wait_for_completion_timeout(txn->comp,
drivers/spi/spi-mxs.c +2 -1
@@ -39,6 +39,7 @@#include <linux/spi/spi.h> #include <linux/spi/mxs-spi.h> #include <trace/events/spi.h> +#include <linux/dma/mxs-dma.h> #define DRIVER_NAME "mxs-spi"
@@ -252,7 +253,7 @@ static int mxs_spi_txrx_dma(struct mxs_spi *spi, desc =dmaengine_prep_slave_sg (ssp->dmach, &dma_xfer[sg_count].sg,1 , (flags &TXRX_WRITE ) ?DMA_MEM_TO_DEV :DMA_DEV_TO_MEM , -DMA_PREP_INTERRUPT |DMA_CTRL_ACK ); +DMA_PREP_INTERRUPT |MXS_DMA_CTRL_WAIT4END );if (!desc) { dev_err(ssp->dev,
drivers/usb/atm/cxacru.c +7 -6
@@ -1131,7 +1131,10 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance,struct cxacru_data *instance;struct usb_device *usb_dev =interface_to_usbdev (intf);struct usb_host_endpoint *cmd_ep = usb_dev->ep_in[CXACRU_EP_CMD ]; -struct usb_endpoint_descriptor *in, *out; +static const u8 ep_addrs[] = { +CXACRU_EP_CMD +USB_DIR_IN , +CXACRU_EP_CMD +USB_DIR_OUT , +0 };int ret;/* instance init */
@@ -1179,13 +1182,11 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, }if (usb_endpoint_xfer_int (&cmd_ep->desc)) - ret =usb_find_common_endpoints (intf->cur_altsetting, -NULL ,NULL , &in, &out); + ret =usb_check_int_endpoints (intf, ep_addrs);else - ret =usb_find_common_endpoints (intf->cur_altsetting, - &in, &out,NULL ,NULL ); + ret =usb_check_bulk_endpoints (intf, ep_addrs); -if (ret) { +if (!ret) {usb_err (usbatm_instance,"cxacru_bind: interface has incorrect endpoints\n" ); ret = -ENODEV ; goto fail;
drivers/usb/core/hub.c +33 -0
@@ -6017,6 +6017,36 @@ void usb_hub_cleanup(void)usb_deregister (&hub_driver); }/* usb_hub_cleanup() */ +/** +* hub_hc_release_resources - clear resources used by host controller +* @udev: pointer to device being released +* +* Context: task context, might sleep +* +* Function releases the host controller resources in correct order before +* making any operation on resuming usb device. The host controller resources +* allocated for devices in tree should be released starting from the last +* usb device in tree toward the root hub. This function is used only during +* resuming device when usb device require reinitialization – that is, when +* flag udev->reset_resume is set. +* +* This call is synchronous, and may not be used in an interrupt context. +*/ +static void hub_hc_release_resources (struct usb_device *udev) +{ +struct usb_hub *hub =usb_hub_to_struct_hub (udev); +struct usb_hcd *hcd =bus_to_hcd (udev->bus); +int i; + +/* Release up resources for all children before this device */ +for (i =0 ; i < udev->maxchild; i++) +if (hub->ports[i]->child) +hub_hc_release_resources (hub->ports[i]->child); + +if (hcd->driver->reset_device) + hcd->driver->reset_device (hcd, udev); +} +/** * usb_reset_and_verify_device - perform a USB port reset to reinitialize a device * @udev: device to reset (not in SUSPENDED or NOTATTACHED state)
@@ -6081,6 +6111,9 @@ static int usb_reset_and_verify_device(struct usb_device *udev) bos = udev->bos; udev->bos =NULL ; +if (udev->reset_resume) +hub_hc_release_resources (udev); +mutex_lock (hcd->address0_mutex);for (i =0 ; i <PORT_INIT_TRIES ; ++i) {
drivers/usb/core/quirks.c +4 -0
@@ -341,6 +341,10 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x0638, 0x0a13), .driver_info = USB_QUIRK_STRING_FETCH_255 }, + /* Prolific Single-LUN Mass Storage Card Reader */ + { USB_DEVICE(0x067b, 0x2731), .driver_info = USB_QUIRK_DELAY_INIT | + USB_QUIRK_NO_LPM }, + /* Saitek Cyborg Gold Joystick */ { USB_DEVICE(0x06a3, 0x0006), .driver_info = USB_QUIRK_CONFIG_INTF_STRINGS },
drivers/usb/dwc3/core.c +48 -37
174 lines not on this page · raw message
drivers/usb/dwc3/core.h +1 -1
@@ -1517,7 +1517,7 @@ struct dwc3_gadget_ep_cmd_params {#define DWC3_HAS_OTG BIT(3)/* prototypes */ -void dwc3_set_prtcap (struct dwc3 *dwc,u32 mode); +void dwc3_set_prtcap (struct dwc3 *dwc,u32 mode,bool ignore_susphy);void dwc3_set_mode (struct dwc3 *dwc,u32 mode);u32 dwc3_core_fifo_space (struct dwc3_ep *dep,u8 type);
drivers/usb/dwc3/drd.c +2 -2
@@ -173,7 +173,7 @@ void dwc3_otg_init(struct dwc3 *dwc)* block "Initialize GCTL for OTG operation". */ /* GCTL.PrtCapDir=2'b11 */ -dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_OTG ); +dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_OTG , true);/* GUSB2PHYCFG0.SusPHY=0 */ reg =dwc3_readl (dwc->regs,DWC3_GUSB2PHYCFG (0 )); reg &= ~DWC3_GUSB2PHYCFG_SUSPHY ;
@@ -553,7 +553,7 @@ int dwc3_drd_init(struct dwc3 *dwc)dwc3_drd_update (dwc); }else { -dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_OTG ); +dwc3_set_prtcap (dwc,DWC3_GCTL_PRTCAP_OTG , true);/* use OTG block to get ID event */ irq =dwc3_otg_get_irq (dwc);
drivers/usb/dwc3/gadget.c +7 -3
@@ -4346,14 +4346,18 @@ static irqreturn_t dwc3_process_event_buf(struct dwc3_event_buffer *evt)dwc3_writel (dwc->regs,DWC3_GEVNTSIZ (0 ),DWC3_GEVNTSIZ_SIZE (evt->length)); + evt->flags &= ~DWC3_EVENT_PENDING ; +/* +* Add an explicit write memory barrier to make sure that the update of +* clearing DWC3_EVENT_PENDING is observed in dwc3_check_event_buf() +*/ +wmb (); +if (dwc->imod_interval) {dwc3_writel (dwc->regs,DWC3_GEVNTCOUNT (0 ),DWC3_GEVNTCOUNT_EHB );dwc3_writel (dwc->regs,DWC3_DEV_IMOD (0 ), dwc->imod_interval); } -/* Keep the clearing of DWC3_EVENT_PENDING at the end */ - evt->flags &= ~DWC3_EVENT_PENDING ; -return ret; }
drivers/usb/gadget/composite.c +12 -5
@@ -1018,10 +1018,11 @@ static int set_config(struct usb_composite_dev *cdev,else usb_gadget_set_remote_wakeup (gadget,0 ); done: -if (power <=USB_SELF_POWER_VBUS_MAX_DRAW ) -usb_gadget_set_selfpowered (gadget); -else +if (power >USB_SELF_POWER_VBUS_MAX_DRAW || + (c && !(c->bmAttributes &USB_CONFIG_ATT_SELFPOWER )))usb_gadget_clear_selfpowered (gadget); +else +usb_gadget_set_selfpowered (gadget);usb_gadget_vbus_draw (gadget, power);if (result >=0 && cdev->delayed_status)
@@ -2490,7 +2491,10 @@ void composite_suspend(struct usb_gadget *gadget) cdev->suspended =1 ; -usb_gadget_set_selfpowered (gadget); +if (cdev->config && + cdev->config->bmAttributes &USB_CONFIG_ATT_SELFPOWER ) +usb_gadget_set_selfpowered (gadget); +usb_gadget_vbus_draw (gadget,2 ); }
@@ -2519,8 +2523,11 @@ void composite_resume(struct usb_gadget *gadget)else maxpower =min (maxpower,900U ); -if (maxpower >USB_SELF_POWER_VBUS_MAX_DRAW ) +if (maxpower >USB_SELF_POWER_VBUS_MAX_DRAW || + !(cdev->config->bmAttributes &USB_CONFIG_ATT_SELFPOWER ))usb_gadget_clear_selfpowered (gadget); +else +usb_gadget_set_selfpowered (gadget);usb_gadget_vbus_draw (gadget, maxpower); }
drivers/usb/host/xhci-mem.c +2 -1
@@ -2388,7 +2388,8 @@ int xhci_mem_init(struct xhci_hcd *xhci, gfp_t flags)* and our use of dma addresses in the trb_address_map radix tree needs * TRB_SEGMENT_SIZE alignment, so we pick the greater alignment need. */ -if (xhci->quirks &XHCI_ZHAOXIN_TRB_FETCH ) +if (xhci->quirks &XHCI_TRB_OVERFETCH ) +/* Buggy HC prefetches beyond segment bounds - allocate dummy space at the end */ xhci->segment_pool =dma_pool_create ("xHCI ring segments" , dev,TRB_SEGMENT_SIZE *2 ,TRB_SEGMENT_SIZE *2 , xhci->page_size *2 );else
drivers/usb/host/xhci-pci.c +11 -7
@@ -28,8 +28,8 @@#define SPARSE_CNTL_ENABLE 0xC12C/* Device for a quirk */ -#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 -#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000 +#define PCI_VENDOR_ID_FRESCO_LOGIC 0x1b73 +#define PCI_DEVICE_ID_FRESCO_LOGIC_PDK 0x1000#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1009 0x1009#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1100 0x1100#define PCI_DEVICE_ID_FRESCO_LOGIC_FL1400 0x1400
@@ -38,8 +38,10 @@#define PCI_DEVICE_ID_EJ168 0x7023#define PCI_DEVICE_ID_EJ188 0x7052 -#define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31 -#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 +#define PCI_DEVICE_ID_VIA_VL805 0x3483 + +#define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31 +#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_XHCI 0x9cb1#define PCI_DEVICE_ID_INTEL_CHERRYVIEW_XHCI 0x22b5#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_XHCI 0xa12f
@@ -304,8 +306,10 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == 0x3432) xhci->quirks |=XHCI_BROKEN_STREAMS ; -if (pdev->vendor ==PCI_VENDOR_ID_VIA && pdev->device ==0x3483 ) +if (pdev->vendor ==PCI_VENDOR_ID_VIA && pdev->device ==PCI_DEVICE_ID_VIA_VL805 ) { xhci->quirks |=XHCI_LPM_SUPPORT ; + xhci->quirks |=XHCI_TRB_OVERFETCH ; + }if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && pdev->device ==PCI_DEVICE_ID_ASMEDIA_1042_XHCI ) {
@@ -353,11 +357,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci)if (pdev->device ==0x9202 ) { xhci->quirks |=XHCI_RESET_ON_RESUME ; - xhci->quirks |=XHCI_ZHAOXIN_TRB_FETCH ; + xhci->quirks |=XHCI_TRB_OVERFETCH ; }if (pdev->device ==0x9203 ) - xhci->quirks |=XHCI_ZHAOXIN_TRB_FETCH ; + xhci->quirks |=XHCI_TRB_OVERFETCH ; } if (pdev->vendor == PCI_DEVICE_ID_CADENCE &&
drivers/usb/host/xhci.h +1 -1
@@ -1659,7 +1659,7 @@ struct xhci_hcd {#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43)#define XHCI_RESET_TO_DEFAULT BIT_ULL(44) -#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45) +#define XHCI_TRB_OVERFETCH BIT_ULL(45)#define XHCI_ZHAOXIN_HOST BIT_ULL(46)#define XHCI_WRITE_64_HI_LO BIT_ULL(47)#define XHCI_CDNS_SCTX_QUIRK BIT_ULL(48)
drivers/usb/renesas_usbhs/common.c +5 -1
@@ -312,8 +312,10 @@ static int usbhsc_clk_get(struct device *dev, struct usbhs_priv *priv) priv->clks[1 ] =of_clk_get (dev_of_node (dev),1 );if (PTR_ERR (priv->clks[1 ]) == -ENOENT ) priv->clks[1 ] =NULL ; -else if (IS_ERR (priv->clks[1 ])) +else if (IS_ERR (priv->clks[1 ])) { +clk_put (priv->clks[0 ]);return PTR_ERR (priv->clks[1 ]); + }return 0 ; }
@@ -768,6 +770,8 @@ static int usbhs_remove(struct platform_device *pdev)dev_dbg (&pdev->dev,"usb remove\n" ); +flush_delayed_work (&priv->notify_hotplug_work); +/* power off */ if (!usbhs_get_dparam (priv, runtime_pwctrl))usbhsc_power_ctrl (priv,0 );
drivers/usb/renesas_usbhs/mod_gadget.c +1 -1
@@ -1094,7 +1094,7 @@ int usbhs_mod_gadget_probe(struct usbhs_priv *priv) goto usbhs_mod_gadget_probe_err_gpriv; } - gpriv->transceiver =usb_get_phy (USB_PHY_TYPE_UNDEFINED ); + gpriv->transceiver =devm_usb_get_phy (dev,USB_PHY_TYPE_UNDEFINED );dev_info (dev,"%stransceiver found\n" , !IS_ERR (gpriv->transceiver) ?"" :"no " );
drivers/usb/typec/tcpm/tcpci_rt1711h.c +11 -0
@@ -332,6 +332,11 @@ static int rt1711h_probe(struct i2c_client *client, {int ret;struct rt1711h_chip *chip; +const u16 alert_mask =TCPC_ALERT_TX_SUCCESS |TCPC_ALERT_TX_DISCARDED | +TCPC_ALERT_TX_FAILED |TCPC_ALERT_RX_HARD_RST | +TCPC_ALERT_RX_STATUS |TCPC_ALERT_POWER_STATUS | +TCPC_ALERT_CC_STATUS |TCPC_ALERT_RX_BUF_OVF | +TCPC_ALERT_FAULT ; chip =devm_kzalloc (&client->dev,sizeof (*chip),GFP_KERNEL );if (!chip)
@@ -380,6 +385,12 @@ static int rt1711h_probe(struct i2c_client *client, dev_name(chip->dev), chip);if (ret <0 )return ret; + +/* Enable alert interrupts */ + ret =rt1711h_write16 (chip,TCPC_ALERT_MASK , alert_mask); +if (ret <0 ) +return ret; +enable_irq_wake (client->irq);return 0 ;
drivers/usb/typec/ucsi/ucsi.c +1 -1
@@ -25,7 +25,7 @@* difficult to estimate the time it takes for the system to process the command * before it is actually passed to the PPM. */ -#define UCSI_TIMEOUT_MS 5000 +#define UCSI_TIMEOUT_MS 10000/* * UCSI_SWAP_TIMEOUT_MS - Timeout for role swap requests
drivers/virt/acrn/hsm.c +3 -3
@@ -49,7 +49,7 @@ static int pmcmd_ioctl(u64 cmd, void __user *uptr)switch (cmd &PMCMD_TYPE_MASK ) {case ACRN_PMCMD_GET_PX_CNT :case ACRN_PMCMD_GET_CX_CNT : - pm_info =kmalloc (sizeof (u64),GFP_KERNEL ); + pm_info =kzalloc (sizeof (u64),GFP_KERNEL );if (!pm_info)return -ENOMEM ;
@@ -64,7 +64,7 @@ static int pmcmd_ioctl(u64 cmd, void __user *uptr)kfree (pm_info);break ;case ACRN_PMCMD_GET_PX_DATA : - px_data =kmalloc (sizeof (*px_data),GFP_KERNEL ); + px_data =kzalloc (sizeof (*px_data),GFP_KERNEL );if (!px_data)return -ENOMEM ;
@@ -79,7 +79,7 @@ static int pmcmd_ioctl(u64 cmd, void __user *uptr)kfree (px_data);break ;case ACRN_PMCMD_GET_CX_DATA : - cx_data =kmalloc (sizeof (*cx_data),GFP_KERNEL ); + cx_data =kzalloc (sizeof (*cx_data),GFP_KERNEL );if (!cx_data)return -ENOMEM ;
fs/exfat/balloc.c +8 -2
@@ -160,7 +160,7 @@ int exfat_set_bitmap(struct inode *inode, unsigned int clu, bool sync)return 0 ; } -void exfat_clear_bitmap (struct inode *inode,unsigned int clu,bool sync) +int exfat_clear_bitmap (struct inode *inode,unsigned int clu,bool sync) {int i, b;unsigned int ent_idx;
@@ -169,13 +169,17 @@ void exfat_clear_bitmap(struct inode *inode, unsigned int clu, bool sync)struct exfat_mount_options *opts = &sbi->options;if (!is_valid_cluster (sbi, clu)) -return ; +return -EIO ; ent_idx =CLUSTER_TO_BITMAP_ENT (clu); i =BITMAP_OFFSET_SECTOR_INDEX (sb, ent_idx); b =BITMAP_OFFSET_BIT_IN_SECTOR (sb, ent_idx); +if (!test_bit_le (b, sbi->vol_amap[i]->b_data)) +return -EIO ; +clear_bit_le (b, sbi->vol_amap[i]->b_data); +exfat_update_bh (sbi->vol_amap[i], sync);if (opts->discard) {
@@ -190,6 +194,8 @@ void exfat_clear_bitmap(struct inode *inode, unsigned int clu, bool sync) opts->discard =0 ; } } + +return 0 ; }/*
fs/exfat/exfat_fs.h +1 -1
@@ -419,7 +419,7 @@ int exfat_count_num_clusters(struct super_block *sb,int exfat_load_bitmap (struct super_block *sb);void exfat_free_bitmap (struct exfat_sb_info *sbi);int exfat_set_bitmap (struct inode *inode,unsigned int clu,bool sync); -void exfat_clear_bitmap (struct inode *inode,unsigned int clu,bool sync); +int exfat_clear_bitmap (struct inode *inode,unsigned int clu,bool sync);unsigned int exfat_find_free_bitmap (struct super_block *sb,unsigned int clu);int exfat_count_used_clusters (struct super_block *sb,unsigned int *ret_count);int exfat_trim_fs (struct inode *inode,struct fstrim_range *range);
fs/exfat/fatent.c +7 -4
@@ -175,6 +175,7 @@ static int __exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chainBITMAP_OFFSET_SECTOR_INDEX (sb,CLUSTER_TO_BITMAP_ENT (clu));if (p_chain->flags ==ALLOC_NO_FAT_CHAIN ) { +int err;unsigned int last_cluster = p_chain->dir + p_chain->size -1 ; do { bool sync = false;
@@ -189,7 +190,9 @@ static int __exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain cur_cmap_i = next_cmap_i; } -exfat_clear_bitmap (inode, clu, (sync &&IS_DIRSYNC (inode))); + err =exfat_clear_bitmap (inode, clu, (sync &&IS_DIRSYNC (inode))); +if (err) +break ; clu++; num_clusters++; }while (num_clusters < p_chain->size);
@@ -210,12 +213,13 @@ static int __exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain cur_cmap_i = next_cmap_i; } -exfat_clear_bitmap (inode, clu, (sync &&IS_DIRSYNC (inode))); +if (exfat_clear_bitmap (inode, clu, (sync &&IS_DIRSYNC (inode)))) +break ; clu = n_clu; num_clusters++;if (err) - goto dec_used_clus; +break ;if (num_clusters >= sbi->num_clusters -EXFAT_FIRST_CLUSTER ) {/*
@@ -229,7 +233,6 @@ static int __exfat_free_cluster(struct inode *inode, struct exfat_chain *p_chain }while (clu !=EXFAT_EOF_CLUSTER ); } -dec_used_clus: sbi->used_clusters -= num_clusters;return 0 ; }
fs/nilfs2/dir.c +11 -13
@@ -64,12 +64,6 @@ static inline unsigned int nilfs_chunk_size(struct inode *inode)return inode->i_sb->s_blocksize; } -static inline void nilfs_put_page (struct page *page) -{ -kunmap (page); -put_page (page); -} -/* * Return the offset into page `page_nr' of the last valid * byte in that page, plus one.
@@ -450,8 +444,7 @@ int nilfs_inode_by_name(struct inode *dir, const struct qstr *qstr, ino_t *ino)return 0 ; } -/* Releases the page */ -void nilfs_set_link (struct inode *dir,struct nilfs_dir_entry *de, +int nilfs_set_link (struct inode *dir,struct nilfs_dir_entry *de,struct page *page,struct inode *inode) {unsigned int from = (char *)de - (char *)page_address (page);
@@ -461,12 +454,15 @@ void nilfs_set_link(struct inode *dir, struct nilfs_dir_entry *de,lock_page (page); err =nilfs_prepare_chunk (page, from, to); -BUG_ON (err); +if (unlikely (err)) { +unlock_page (page); +return err; + } de->inode =cpu_to_le64 (inode->i_ino);nilfs_set_de_type (de, inode);nilfs_commit_chunk (page, mapping, from, to); -nilfs_put_page (page); dir->i_mtime = dir->i_ctime =current_time (dir); +return 0 ; }/*
@@ -569,7 +565,7 @@ int nilfs_add_link(struct dentry *dentry, struct inode *inode)/* * nilfs_delete_entry deletes a directory entry by merging it with the -* previous entry. Page is up-to-date. Releases the page. +* previous entry. Page is up-to-date. */ int nilfs_delete_entry (struct nilfs_dir_entry *dir,struct page *page) {
@@ -598,14 +594,16 @@ int nilfs_delete_entry(struct nilfs_dir_entry *dir, struct page *page) from = (char *)pde - (char *)page_address (page);lock_page (page); err =nilfs_prepare_chunk (page, from, to); -BUG_ON (err); +if (unlikely (err)) { +unlock_page (page); + goto out; + }if (pde) pde->rec_len =nilfs_rec_len_to_disk (to - from); dir->inode =0 ;nilfs_commit_chunk (page, mapping, from, to); inode->i_ctime = inode->i_mtime =current_time (inode); out: -nilfs_put_page (page);return err; }
fs/nilfs2/namei.c +20 -17
@@ -297,6 +297,7 @@ static int nilfs_do_unlink(struct inode *dir, struct dentry *dentry)set_nlink (inode,1 ); } err =nilfs_delete_entry (de, page); +nilfs_put_page (page);if (err) goto out;
@@ -405,7 +406,10 @@ static int nilfs_rename(struct user_namespace *mnt_userns, err =PTR_ERR (new_de); goto out_dir; } -nilfs_set_link (new_dir, new_de, new_page, old_inode); + err =nilfs_set_link (new_dir, new_de, new_page, old_inode); +nilfs_put_page (new_page); +if (unlikely (err)) + goto out_dir;nilfs_mark_inode_dirty (new_dir); new_inode->i_ctime =current_time (new_inode);if (dir_de)
@@ -428,28 +432,27 @@ static int nilfs_rename(struct user_namespace *mnt_userns,*/ old_inode->i_ctime =current_time (old_inode); -nilfs_delete_entry (old_de, old_page); - -if (dir_de) { -nilfs_set_link (old_inode, dir_de, dir_page, new_dir); -drop_nlink (old_dir); + err =nilfs_delete_entry (old_de, old_page); +if (likely (!err)) { +if (dir_de) { + err =nilfs_set_link (old_inode, dir_de, dir_page, + new_dir); +drop_nlink (old_dir); + } +nilfs_mark_inode_dirty (old_dir); } -nilfs_mark_inode_dirty (old_dir);nilfs_mark_inode_dirty (old_inode); - err =nilfs_transaction_commit (old_dir->i_sb); -return err; - out_dir: -if (dir_de) { -kunmap (dir_page); -put_page (dir_page); - } +if (dir_de) +nilfs_put_page (dir_page); out_old: -kunmap (old_page); -put_page (old_page); +nilfs_put_page (old_page); out: -nilfs_transaction_abort (old_dir->i_sb); +if (likely (!err)) + err =nilfs_transaction_commit (old_dir->i_sb); +else +nilfs_transaction_abort (old_dir->i_sb);return err; }
fs/nilfs2/nilfs.h +8 -2
@@ -240,8 +240,14 @@ nilfs_find_entry(struct inode *, const struct qstr *, struct page **);extern int nilfs_delete_entry (struct nilfs_dir_entry *,struct page *);extern int nilfs_empty_dir (struct inode *);extern struct nilfs_dir_entry *nilfs_dotdot (struct inode *,struct page **); -extern void nilfs_set_link (struct inode *,struct nilfs_dir_entry *, -struct page *,struct inode *); +int nilfs_set_link (struct inode *dir,struct nilfs_dir_entry *de, +struct page *page,struct inode *inode); + +static inline void nilfs_put_page (struct page *page) +{ +kunmap (page); +put_page (page); +}/* file.c */ extern int nilfs_sync_file (struct file *,loff_t ,loff_t ,int );
fs/ntfs3/record.c +3 -0
@@ -325,6 +325,9 @@ struct ATTRIB *mi_enum_attr(struct mft_inode *mi, struct ATTRIB *attr) }else {if (attr->nres.c_unit)return NULL ; + +if (alloc_size > mi->sbi->volume.size) +return NULL ; }return attr;
fs/smb/server/smb2pdu.c +4 -4
@@ -7124,17 +7124,17 @@ int smb2_lock(struct ksmbd_work *work) } no_check_cl: + flock = smb_lock->fl; +list_del (&smb_lock->llist); +if (smb_lock->zero_len) { err =0 ; goto skip; } - - flock = smb_lock->fl; -list_del (&smb_lock->llist); retry: rc =vfs_lock_file (filp, smb_lock->cmd, flock,NULL ); skip: -if (flags &SMB2_LOCKFLAG_UNLOCK ) { +if (smb_lock->flags &SMB2_LOCKFLAG_UNLOCK ) {if (!rc) {ksmbd_debug (SMB ,"File unlocked\n" ); }else if (rc == -ENOENT ) {
fs/smb/server/transport_ipc.c +1 -0
@@ -267,6 +267,7 @@ static int handle_response(int type, void *payload, size_t sz)if (entry->type +1 != type) {pr_err ("Waiting for IPC type %d, got %d. Ignore.\n" , entry->type +1 , type); +continue ; } entry->response =kvzalloc (sz,GFP_KERNEL );
kernel/events/uprobes.c +1 -1
@@ -1724,6 +1724,7 @@ void uprobe_free_utask(struct task_struct *t)if (!utask)return ; + t->utask =NULL ;if (utask->active_uprobe)put_uprobe (utask->active_uprobe);
@@ -1733,7 +1734,6 @@ void uprobe_free_utask(struct task_struct *t)xol_free_insn_slot (t);kfree (utask); - t->utask =NULL ; }/*
kernel/sched/fair.c +4 -2
@@ -3550,15 +3550,17 @@ static inline bool child_cfs_rq_on_list(struct cfs_rq *cfs_rq) {struct cfs_rq *prev_cfs_rq;struct list_head *prev; +struct rq *rq =rq_of (cfs_rq);if (cfs_rq->on_list) { prev = cfs_rq->leaf_cfs_rq_list.prev; }else { -struct rq *rq =rq_of (cfs_rq); - prev = rq->tmp_alone_branch; } +if (prev == &rq->leaf_cfs_rq_list) +return false; + prev_cfs_rq = container_of(prev, struct cfs_rq, leaf_cfs_rq_list);return (prev_cfs_rq->tg->parent == cfs_rq->tg);
mm/kmsan/hooks.c +1 -0
@@ -346,6 +346,7 @@ void kmsan_handle_dma(struct page *page, size_t offset, size_t size, size -= to_go; } } +EXPORT_SYMBOL_GPL (kmsan_handle_dma);void kmsan_handle_dma_sg (struct scatterlist *sg,int nents,enum dma_data_direction dir)
mm/memory.c +4 -2
@@ -2802,8 +2802,10 @@ static int __apply_to_page_range(struct mm_struct *mm, unsigned long addr, next =pgd_addr_end (addr, end);if (pgd_none (*pgd) && !create)continue ; -if (WARN_ON_ONCE (pgd_leaf (*pgd))) -return -EINVAL ; +if (WARN_ON_ONCE (pgd_leaf (*pgd))) { + err = -EINVAL ; +break ; + }if (!pgd_none (*pgd) &&WARN_ON_ONCE (pgd_bad (*pgd))) {if (!create)continue ;
mm/page_alloc.c +1 -0
@@ -5092,6 +5092,7 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, restart: compaction_retries =0 ; no_progress_loops =0 ; + compact_result =COMPACT_SKIPPED ; compact_priority =DEF_COMPACT_PRIORITY ; cpuset_mems_cookie =read_mems_allowed_begin (); zonelist_iter_cookie =zonelist_iter_begin ();
mm/vmalloc.c +2 -2
@@ -566,13 +566,13 @@ static int vmap_small_pages_range_noflush(unsigned long addr, unsigned long end, mask |=PGTBL_PGD_MODIFIED ; err =vmap_pages_p4d_range (pgd, addr, next, prot, pages, &nr, &mask);if (err) -return err; +break ; }while (pgd++, addr = next, addr != end);if (mask &ARCH_PAGE_TABLE_SYNC_MASK )arch_sync_kernel_mappings (start, end); -return 0 ; +return err; }/*
net/8021q/vlan.c +2 -1
@@ -131,7 +131,8 @@ int vlan_check_real_dev(struct net_device *real_dev, {const char *name = real_dev->name; -if (real_dev->features &NETIF_F_VLAN_CHALLENGED ) { +if (real_dev->features &NETIF_F_VLAN_CHALLENGED || + real_dev->type !=ARPHRD_ETHER ) {pr_info ("VLANs not supported on %s\n" , name);NL_SET_ERR_MSG_MOD (extack,"VLANs not supported on device" );return -EOPNOTSUPP ;
net/bluetooth/mgmt.c +5 -0
@@ -9733,6 +9733,9 @@ void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,sizeof (*ev) + (name ?eir_precalc_len (name_len) :0 ) + eir_precalc_len(sizeof(conn->dev_class))); +if (!skb) +return ; + ev =skb_put (skb,sizeof (*ev));bacpy (&ev->addr.bdaddr, &conn->dst); ev->addr.type =link_to_bdaddr (conn->type, conn->dst_type);
@@ -10514,6 +10517,8 @@ void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type, skb =mgmt_alloc_skb (hdev,MGMT_EV_DEVICE_FOUND ,sizeof (*ev) + (name ?eir_precalc_len (name_len) :0 )); +if (!skb) +return ; ev =skb_put (skb,sizeof (*ev));bacpy (&ev->addr.bdaddr, bdaddr);
net/ipv4/tcp_offload.c +7 -4
@@ -12,12 +12,15 @@#include <net/tcp.h> #include <net/protocol.h> -static void tcp_gso_tstamp (struct sk_buff *skb,unsigned int ts_seq, +static void tcp_gso_tstamp (struct sk_buff *skb,struct sk_buff *gso_skb,unsigned int seq,unsigned int mss) { +u32 flags =skb_shinfo (gso_skb)->tx_flags &SKBTX_ANY_TSTAMP ; +u32 ts_seq =skb_shinfo (gso_skb)->tskey; +while (skb) {if (before (ts_seq, seq + mss)) { -skb_shinfo (skb)->tx_flags |=SKBTX_SW_TSTAMP ; +skb_shinfo (skb)->tx_flags |= flags;skb_shinfo (skb)->tskey = ts_seq;return ; }
@@ -119,8 +122,8 @@ struct sk_buff *tcp_gso_segment(struct sk_buff *skb, th =tcp_hdr (skb); seq =ntohl (th->seq); -if (unlikely (skb_shinfo (gso_skb)->tx_flags &SKBTX_SW_TSTAMP )) -tcp_gso_tstamp (segs,skb_shinfo (gso_skb)->tskey, seq, mss); +if (unlikely (skb_shinfo (gso_skb)->tx_flags &SKBTX_ANY_TSTAMP )) +tcp_gso_tstamp (segs, gso_skb, seq, mss); newcheck = ~csum_fold (csum_add (csum_unfold (th->check), delta));
net/ipv4/udp_offload.c +6 -2
@@ -314,13 +314,17 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,/* clear destructor to avoid skb_segment assigning it to tail */ copy_dtor = gso_skb->destructor == sock_wfree; -if (copy_dtor) +if (copy_dtor) { gso_skb->destructor =NULL ; + gso_skb->sk =NULL ; + } segs =skb_segment (gso_skb, features);if (IS_ERR_OR_NULL (segs)) { -if (copy_dtor) +if (copy_dtor) { gso_skb->destructor = sock_wfree; + gso_skb->sk = sk; + }return segs; }
net/ipv6/ila/ila_lwt.c +3 -1
@@ -88,13 +88,15 @@ static int ila_output(struct net *net, struct sock *sk, struct sk_buff *skb) goto drop; } -if (ilwt->connected) { +/* cache only if we don't create a dst reference loop */ +if (ilwt->connected && orig_dst->lwtstate != dst->lwtstate) {local_bh_disable ();dst_cache_set_ip6 (&ilwt->dst_cache, dst, &fl6.saddr);local_bh_enable (); } } +skb_dst_drop (skb);skb_dst_set (skb, dst);return dst_output (net, sk, skb);
net/llc/llc_s_ac.c +27 -22
42 lines not on this page · raw message
net/vmw_vsock/af_vsock.c +50 -27
77 lines not on this page · raw message
sound/pci/hda/patch_realtek.c +94 -5
99 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.