Linux 5.10.143
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.143 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/arm64/silicon-errata.rst | 2 Makefile | 2 arch/arm/boot/dts/at91-sama5d27_wlsom1.dtsi | 21 ++-- arch/arm/boot/dts/at91-sama5d2_icp.dts | 21 ++-- arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi | 10 -- arch/arm64/Kconfig | 18 +++ arch/arm64/include/asm/cpucaps.h | 3 arch/arm64/kernel/cacheinfo.c | 6 + arch/arm64/kernel/cpu_errata.c | 9 + arch/arm64/kernel/cpufeature.c | 5 - arch/mips/loongson32/ls1c/board.c | 1 arch/parisc/kernel/head.S | 43 ++++++++- drivers/block/xen-blkfront.c | 14 +- drivers/firmware/efi/capsule-loader.c | 31 +----- drivers/firmware/efi/libstub/Makefile | 7 + drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 2 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 3 drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c | 1 drivers/gpu/drm/drm_gem.c | 17 --- drivers/gpu/drm/drm_internal.h | 4 drivers/gpu/drm/drm_prime.c | 20 ++-- drivers/gpu/drm/i915/display/intel_dp_link_training.c | 22 ++++ drivers/gpu/drm/radeon/radeon_device.c | 3 drivers/hwmon/mr75203.c | 72 ++++++++++----- drivers/infiniband/core/cma.c | 4 drivers/infiniband/core/umem_odp.c | 2 drivers/infiniband/hw/hns/hns_roce_hw_v2.h | 2 drivers/infiniband/hw/hns/hns_roce_qp.c | 7 - drivers/infiniband/hw/mlx5/mad.c | 6 + drivers/infiniband/sw/siw/siw_qp_tx.c | 18 ++- drivers/iommu/amd/iommu.c | 3 drivers/net/ethernet/intel/i40e/i40e_client.c | 5 - drivers/net/ethernet/intel/ice/ice_main.c | 2 drivers/net/wireless/intel/iwlegacy/4965-rs.c | 5 - drivers/net/xen-netback/xenbus.c | 2 drivers/nvme/host/tcp.c | 7 - drivers/nvme/target/core.c | 6 - drivers/parisc/ccio-dma.c | 11 +- drivers/regulator/core.c | 9 + drivers/scsi/lpfc/lpfc_init.c | 5 - drivers/scsi/megaraid/megaraid_sas_fusion.c | 1 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 drivers/scsi/qla2xxx/qla_target.c | 10 -- drivers/soc/bcm/brcmstb/pm/pm-arm.c | 50 ++++++++-- drivers/tee/tee_shm.c | 1 drivers/tty/n_gsm.c | 46 ++++----- drivers/video/fbdev/chipsfb.c | 1 fs/afs/flock.c | 2 fs/afs/fsclient.c | 2 fs/afs/internal.h | 3 fs/afs/rxrpc.c | 7 - fs/afs/yfsclient.c | 3 fs/cifs/smb2file.c | 1 fs/cifs/smb2ops.c | 45 +++------ fs/cifs/smb2pdu.c | 20 +--- fs/cifs/smb2proto.h | 4 fs/debugfs/inode.c | 22 ++++ fs/nfsd/vfs.c | 4 include/linux/buffer_head.h | 11 ++ include/linux/debugfs.h | 6 + kernel/cgroup/cgroup.c | 85 +++++++++++++----- kernel/cgroup/cpuset.c | 3 kernel/dma/swiotlb.c | 5 - kernel/fork.c | 1 kernel/kprobes.c | 1 mm/kmemleak.c | 8 - net/bridge/br_netfilter_hooks.c | 2 net/bridge/br_netfilter_ipv6.c | 1 net/core/skbuff.c | 5 - net/ipv4/tcp_input.c | 25 +++-- net/ipv6/seg6.c | 5 + net/netfilter/nf_conntrack_irc.c | 5 - net/netfilter/nf_tables_api.c | 4 net/rxrpc/rxkad.c | 2 net/sched/sch_sfb.c | 13 +- net/tipc/monitor.c | 2 sound/drivers/aloop.c | 7 - sound/pci/emu10k1/emupcm.c | 2 sound/soc/atmel/mchp-spdiftx.c | 10 -- sound/usb/card.c | 2 sound/usb/quirks.c | 2 sound/usb/stream.c | 9 + 83 files changed, 554 insertions(+), 320 deletions(-)
Andrew Halaney (1):
regulator: core: Clean up on enable failure
Ard Biesheuvel (1):
efi: libstub: Disable struct randomization
Bart Van Assche (1):
nvmet: fix a use-after-free
Candice Li (1):
drm/amdgpu: Check num_gfx_rings for gfx v9_0 rb setup.
Chao Gao (1):
swiotlb: avoid potential left shift overflow
Chengchang Tang (1):
RDMA/hns: Fix supported page size
Chris Mi (1):
RDMA/mlx5: Set local port to one when accessing counters
Christian A. Ehrhardt (1):
kprobes: Prohibit probes in gate area
Chuck Lever (1):
NFSD: Fix verifier returned in stable WRITEs
Claudiu Beznea (5):
ARM: dts: at91: sama5d27_wlsom1: specify proper regulator output ranges
ARM: dts: at91: sama5d2_icp: specify proper regulator output ranges
ARM: dts: at91: sama5d27_wlsom1: don't keep ldo2 enabled all the time
ARM: dts: at91: sama5d2_icp: don't keep vdd_other enabled all the time
ASoC: mchp-spdiftx: remove references to mchp_i2s_caps
Dan Carpenter (1):
tipc: fix shift wrapping bug in map_get()
David Howells (3):
smb3: missing inode locks in punch hole
rxrpc: Fix an insufficiently large sglist in rxkad_verify_packet_2()
afs: Use the operation issue time instead of the reply time for callbacks
David Leadbeater (1):
netfilter: nf_conntrack_irc: Fix forged IP logic
David Lebrun (1):
ipv6: sr: fix out-of-bounds read when setting HMAC data.
Dongxiang Ke (1):
ALSA: usb-audio: Fix an out-of-bounds bug in __snd_usb_parse_audio_interface()
Eliav Farber (5):
hwmon: (mr75203) fix VM sensor allocation when "intel,vm-map" not defined
hwmon: (mr75203) update pvt->v_num and vm_num to the actual number of used sensors
hwmon: (mr75203) fix voltage equation for negative source input
hwmon: (mr75203) fix multi-channel voltage reading
hwmon: (mr75203) enable polling for all VM channels
Enzo Matsumiya (1):
cifs: remove useless parameter 'is_fsctl' from SMB2_ioctl()
Fedor Pchelkin (1):
tty: n_gsm: avoid call of sleeping functions from atomic context
Greg Kroah-Hartman (2):
debugfs: add debugfs_lookup_and_remove()
Linux 5.10.143
Guixin Liu (1):
scsi: megaraid_sas: Fix double kfree()
Harsh Modi (1):
netfilter: br_netfilter: Drop dst references before setting.
Helge Deller (1):
parisc: Add runtime check to prevent PA2.0 kernels on PA1.x machines
Hyunwoo Kim (1):
efi: capsule-loader: Fix use-after-free in efi_capsule_write
Ionela Voinescu (1):
arm64: errata: add detection for AMEVCNTR01 incrementing incorrectly
Ivan Vecera (1):
i40e: Fix kernel crash during module removal
Jeffy Chen (1):
drm/gem: Fix GEM handle release errors
Jens Wiklander (1):
tee: fix compiler warning in tee_shm_register()
John Sperbeck (1):
iommu/amd: use full 64-bit value in build_completion_wait()
Li Qiong (1):
parisc: ccio-dma: Handle kmalloc failure in ccio_init_resources()
Liang He (1):
soc: brcmstb: pm-arm: Fix refcount leak and __iomem leak bugs
Linus Torvalds (1):
fs: only do a memory barrier for the first set_buffer_uptodate()
Linus Walleij (1):
RDMA/siw: Pass a pointer to virt_to_page()
Marco Felsch (1):
ARM: dts: imx6qdl-kontron-samx6i: remove duplicated node
Michael Guralnik (1):
RDMA/cma: Fix arguments order in net device validation
Michal Swiatkowski (1):
ice: use bitmap_free instead of devm_kfree
Nathan Chancellor (1):
ASoC: mchp-spdiftx: Fix clang -Wbitfield-constant-conversion
Neal Cardwell (1):
tcp: fix early ETIMEDOUT after spurious non-SACK RTO
Pablo Neira Ayuso (1):
netfilter: nf_tables: clean up hook list when offload flags check fails
Pattara Teerapong (1):
ALSA: aloop: Fix random zeros in capture data when using jiffies timer
Paul Durrant (1):
xen-netback: only remove 'hotplug-status' when the vif is actually destroyed
Qu Huang (1):
drm/amdgpu: mmVM_L2_CNTL3 register not initialized correctly
Sagi Grimberg (2):
nvme-tcp: fix UAF when detecting digest errors
nvme-tcp: fix regression that causes sporadic requests to time out
SeongJae Park (1):
xen-blkfront: Cache feature_persistent value before advertisement
Sreekanth Reddy (1):
scsi: mpt3sas: Fix use-after-free warning
Stanislaw Gruszka (1):
wifi: iwlegacy: 4965: corrected fix for potential off-by-one overflow in il4965_rs_fill_link_cmd()
Sudeep Holla (1):
arm64: cacheinfo: Fix incorrect assignment of signed error value to unsigned fw_level
Takashi Iwai (2):
ALSA: usb-audio: Inform the delayed registration more properly
ALSA: usb-audio: Register card again for iface over delayed_register option
Tasos Sahanidis (1):
ALSA: emu10k1: Fix out of bounds access in snd_emu10k1_pcm_channel_alloc()
Tejun Heo (2):
cgroup: Elide write-locking threadgroup_rwsem when updating csses on an empty subtree
cgroup: Fix threadgroup_rwsem <-> cpus_read_lock() deadlock
Tetsuo Handa (1):
tty: n_gsm: initialize more members at gsm_alloc_mux()
Toke Høiland-Jørgensen (2):
sch_sfb: Don't assume the skb is still around after enqueueing to child
sch_sfb: Also store skb len before calling child enqueue
Tony Battersby (1):
scsi: qla2xxx: Disable ATIO interrupt coalesce for quad port ISP27XX
Ville Syrjälä (1):
drm/i915: Implement WaEdpLinkRateDataReload
Wenpeng Liang (1):
RDMA/hns: Fix wrong fixed value of qp->rq.wqe_shift
Yang Ling (1):
MIPS: loongson32: ls1c: Fix hang during startup
Yang Yingliang (2):
fbdev: chipsfb: Add missing pci_disable_device() in chipsfb_pci_init()
scsi: lpfc: Add missing destroy_workqueue() in error path
Yee Lee (1):
Revert "mm: kmemleak: take a full lowmem check in kmemleak_*_phys()"
YiPeng Chai (1):
drm/amdgpu: Move psp_xgmi_terminate call from amdgpu_xgmi_remove_device to psp_hw_fini
Yishai Hadas (1):
IB/core: Fix a nested dead lock as part of ODP flow
Zhenneng Li (1):
drm/radeon: add a force flush to delay work when radeon
lily (1):
net/core/skbuff: Check the return value of skb_copy_bits()
Greg Kroah-Hartman
maintainerDocumentation/arm64/silicon-errata.rst +2 -0
@@ -92,6 +92,8 @@ stable kernels. +----------------+-----------------+-----------------+-----------------------------+ | ARM | Cortex-A77 | #1508412 | ARM64_ERRATUM_1508412 | +----------------+-----------------+-----------------+-----------------------------+ +| ARM | Cortex-A510 | #2457168 | ARM64_ERRATUM_2457168 | ++----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-N1 | #1188873,1418040| ARM64_ERRATUM_1418040 | +----------------+-----------------+-----------------+-----------------------------+ | ARM | Neoverse-N1 | #1349291 | N/A |
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 142 +SUBLEVEL = 143 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/at91-sama5d27_wlsom1.dtsi +10 -11
@@ -62,8 +62,8 @@ mcp16502@5b { regulators { vdd_3v3: VDD_IO { regulator-name = "VDD_IO"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3700000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on;
@@ -81,8 +81,8 @@ regulator-state-mem { vddio_ddr: VDD_DDR { regulator-name = "VDD_DDR"; - regulator-min-microvolt = <600000>; - regulator-max-microvolt = <1850000>; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <1200000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on;
@@ -104,8 +104,8 @@ regulator-state-mem { vdd_core: VDD_CORE { regulator-name = "VDD_CORE"; - regulator-min-microvolt = <600000>; - regulator-max-microvolt = <1850000>; + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <1250000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on;
@@ -146,8 +146,8 @@ regulator-state-mem { LDO1 { regulator-name = "LDO1"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3700000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; regulator-always-on; regulator-state-standby {
@@ -161,9 +161,8 @@ regulator-state-mem { LDO2 { regulator-name = "LDO2"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3700000>; - regulator-always-on; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; regulator-state-standby { regulator-on-in-suspend;
arch/arm/boot/dts/at91-sama5d2_icp.dts +10 -11
@@ -195,8 +195,8 @@ mcp16502@5b { regulators { vdd_io_reg: VDD_IO { regulator-name = "VDD_IO"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3700000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on;
@@ -214,8 +214,8 @@ regulator-state-mem { VDD_DDR { regulator-name = "VDD_DDR"; - regulator-min-microvolt = <600000>; - regulator-max-microvolt = <1850000>; + regulator-min-microvolt = <1350000>; + regulator-max-microvolt = <1350000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on;
@@ -233,8 +233,8 @@ regulator-state-mem { VDD_CORE { regulator-name = "VDD_CORE"; - regulator-min-microvolt = <600000>; - regulator-max-microvolt = <1850000>; + regulator-min-microvolt = <1250000>; + regulator-max-microvolt = <1250000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on;
@@ -256,7 +256,6 @@ VDD_OTHER { regulator-max-microvolt = <1850000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; - regulator-always-on; regulator-state-standby { regulator-on-in-suspend;
@@ -271,8 +270,8 @@ regulator-state-mem { LDO1 { regulator-name = "LDO1"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3700000>; + regulator-min-microvolt = <2500000>; + regulator-max-microvolt = <2500000>; regulator-always-on; regulator-state-standby {
@@ -286,8 +285,8 @@ regulator-state-mem { LDO2 { regulator-name = "LDO2"; - regulator-min-microvolt = <1200000>; - regulator-max-microvolt = <3700000>; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; regulator-always-on; regulator-state-standby {
arch/arm/boot/dts/imx6qdl-kontron-samx6i.dtsi +0 -10
@@ -51,16 +51,6 @@ reg_3p3v_s0: regulator-3p3v-s0 { vin-supply = <®_3p3v_s5>; }; - reg_3p3v_s0: regulator-3p3v-s0 { - compatible = "regulator-fixed"; - regulator-name = "V_3V3_S0"; - regulator-min-microvolt = <3300000>; - regulator-max-microvolt = <3300000>; - regulator-always-on; - regulator-boot-on; - vin-supply = <®_3p3v_s5>; - }; - reg_3p3v_s5: regulator-3p3v-s5 { compatible = "regulator-fixed"; regulator-name = "V_3V3_S5";
arch/arm64/Kconfig +18 -0
@@ -657,6 +657,24 @@ config ARM64_ERRATUM_1508412 If unsure, say Y. +config ARM64_ERRATUM_2457168 + bool "Cortex-A510: 2457168: workaround for AMEVCNTR01 incrementing incorrectly" + depends on ARM64_AMU_EXTN + default y + help + This option adds the workaround for ARM Cortex-A510 erratum 2457168. + + The AMU counter AMEVCNTR01 (constant counter) should increment at the same rate + as the system counter. On affected Cortex-A510 cores AMEVCNTR01 increments + incorrectly giving a significantly higher output value. + + Work around this problem by keeping the reference values of affected counters + to 0 thus signaling an error case. This effect is the same to firmware disabling + affected counters, in which case 0 will be returned when reading the disabled + counters. + + If unsure, say Y. + config CAVIUM_ERRATUM_22375 bool "Cavium erratum 22375, 24313" default y
arch/arm64/include/asm/cpucaps.h +2 -1
@@ -67,7 +67,8 @@#define ARM64_MTE 57#define ARM64_WORKAROUND_1508412 58#define ARM64_SPECTRE_BHB 59 +#define ARM64_WORKAROUND_2457168 60 -#define ARM64_NCAPS 60 +#define ARM64_NCAPS 61#endif /* __ASM_CPUCAPS_H */
arch/arm64/kernel/cacheinfo.c +5 -1
@@ -45,7 +45,8 @@ static void ci_leaf_init(struct cacheinfo *this_leaf,int init_cache_level (unsigned int cpu) { -unsigned int ctype, level, leaves, fw_level; +unsigned int ctype, level, leaves; +int fw_level;struct cpu_cacheinfo *this_cpu_ci =get_cpu_cacheinfo (cpu);for (level =1 , leaves =0 ; level <=MAX_CACHE_LEVEL ; level++) {
@@ -63,6 +64,9 @@ int init_cache_level(unsigned int cpu)else fw_level =acpi_find_last_cache_level (cpu); +if (fw_level <0 ) +return fw_level; +if (level < fw_level) {/* * some external caches not specified in CLIDR_EL1
arch/arm64/kernel/cpu_errata.c +9 -0
@@ -545,6 +545,15 @@ const struct arm64_cpu_capabilities arm64_errata[] = { 0, 0, 1, 0), }, +#endif +#ifdef CONFIG_ARM64_ERRATUM_2457168 + { + .desc = "ARM erratum 2457168", + .capability = ARM64_WORKAROUND_2457168, + .type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE, + /* Cortex-A510 r0p0-r1p1 */ + CAP_MIDR_RANGE(MIDR_CORTEX_A510, 0, 0, 1, 1) + }, #endif { }
arch/arm64/kernel/cpufeature.c +4 -1
@@ -1559,7 +1559,10 @@ static void cpu_amu_enable(struct arm64_cpu_capabilities const *cap)pr_info ("detected CPU%d: Activity Monitors Unit (AMU)\n" ,smp_processor_id ());cpumask_set_cpu (smp_processor_id (), &amu_cpus); -init_cpu_freq_invariance_counters (); + +/* 0 reference values signal broken/disabled counters */ +if (!this_cpu_has_cap (ARM64_WORKAROUND_2457168 )) +init_cpu_freq_invariance_counters (); } }
arch/mips/loongson32/ls1c/board.c +0 -1
@@ -15,7 +15,6 @@ static struct platform_device *ls1c_platform_devices[] __initdata = {static int __init ls1c_platform_init (void ) {ls1x_serial_set_uartclk (&ls1x_uart_pdev); -ls1x_rtc_set_extclk (&ls1x_rtc_pdev);return platform_add_devices (ls1c_platform_devices,ARRAY_SIZE (ls1c_platform_devices));
arch/parisc/kernel/head.S +42 -1
55 lines not on this page · raw message
drivers/block/xen-blkfront.c +7 -7
@@ -1852,6 +1852,12 @@ static void free_info(struct blkfront_info *info)kfree (info); } +/* Enable the persistent grants feature. */ +static bool feature_persistent = true; +module_param (feature_persistent, bool,0644 ); +MODULE_PARM_DESC (feature_persistent, +"Enables the persistent grants feature" ); +/* Common code used when first setting up, and when resuming. */ static int talk_to_blkback (struct xenbus_device *dev,struct blkfront_info *info)
@@ -1943,6 +1949,7 @@ static int talk_to_blkback(struct xenbus_device *dev, message ="writing protocol" ; goto abort_transaction; } + info->feature_persistent_parm = feature_persistent; err =xenbus_printf (xbt, dev->nodename,"feature-persistent" ,"%u" , info->feature_persistent_parm);if (err)
@@ -2019,12 +2026,6 @@ static int negotiate_mq(struct blkfront_info *info)return 0 ; } -/* Enable the persistent grants feature. */ -static bool feature_persistent = true; -module_param (feature_persistent, bool,0644 ); -MODULE_PARM_DESC (feature_persistent, -"Enables the persistent grants feature" ); -/** * Entry point to this code when a new device is created. Allocate the basic * structures and the ring buffer for communication with the backend, and
@@ -2394,7 +2395,6 @@ static void blkfront_gather_backend_features(struct blkfront_info *info)if (xenbus_read_unsigned (info->xbdev->otherend,"feature-discard" ,0 ))blkfront_setup_discard (info); - info->feature_persistent_parm = feature_persistent;if (info->feature_persistent_parm) info->feature_persistent = !!xenbus_read_unsigned(info->xbdev->otherend,
drivers/firmware/efi/capsule-loader.c +7 -24
@@ -242,29 +242,6 @@ static ssize_t efi_capsule_write(struct file *file, const char __user *buff,return ret; } -/** -* efi_capsule_flush - called by file close or file flush -* @file: file pointer -* @id: not used -* -* If a capsule is being partially uploaded then calling this function -* will be treated as upload termination and will free those completed -* buffer pages and -ECANCELED will be returned. -**/ -static int efi_capsule_flush (struct file *file,fl_owner_t id) -{ -int ret =0 ; -struct capsule_info *cap_info = file->private_data; - -if (cap_info->index >0 ) { -pr_err ("capsule upload not complete\n" ); -efi_free_all_buff_pages (cap_info); - ret = -ECANCELED ; - } - -return ret; -} -/** * efi_capsule_release - called by file close * @inode: not used
@@ -277,6 +254,13 @@ static int efi_capsule_release(struct inode *inode, struct file *file) {struct capsule_info *cap_info = file->private_data; +if (cap_info->index >0 && + (cap_info->header.headersize ==0 || + cap_info->count < cap_info->total_size)) { +pr_err ("capsule upload not complete\n" ); +efi_free_all_buff_pages (cap_info); + } +kfree (cap_info->pages);kfree (cap_info->phys);kfree (file->private_data);
@@ -324,7 +308,6 @@ static const struct file_operations efi_capsule_fops = { .owner = THIS_MODULE, .open = efi_capsule_open, .write = efi_capsule_write, - .flush = efi_capsule_flush, .release = efi_capsule_release, .llseek = no_llseek, };
drivers/firmware/efi/libstub/Makefile +7 -0
@@ -37,6 +37,13 @@ KBUILD_CFLAGS := $(cflags-y) -Os -DDISABLE_BRANCH_PROFILING \ $(call cc-option,-fno-addrsig) \ -D__DISABLE_EXPORTS +# +# struct randomization only makes sense for Linux internal types, which the EFI +# stub code never touches, so let's turn off struct randomization for the stub +# altogether +# +KBUILD_CFLAGS := $(filter-out $(RANDSTRUCT_CFLAGS), $(KBUILD_CFLAGS)) + # remove SCS flags from all objects in this directory KBUILD_CFLAGS := $(filter-out $(CC_FLAGS_SCS), $(KBUILD_CFLAGS))
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +3 -0
@@ -2146,6 +2146,9 @@ static int psp_hw_fini(void *handle)psp_rap_terminate (psp);psp_dtm_terminate (psp);psp_hdcp_terminate (psp); + +if (adev->gmc.xgmi.num_physical_nodes >1 ) +psp_xgmi_terminate (psp); }psp_asd_unload (psp);
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +1 -1
@@ -622,7 +622,7 @@ int amdgpu_xgmi_remove_device(struct amdgpu_device *adev)amdgpu_put_xgmi_hive (hive); } -return psp_xgmi_terminate (&adev->psp); +return 0 ; }int amdgpu_xgmi_ras_late_init (struct amdgpu_device *adev)
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -1
@@ -2570,7 +2570,8 @@ static void gfx_v9_0_constants_init(struct amdgpu_device *adev)gfx_v9_0_tiling_mode_table_init (adev); -gfx_v9_0_setup_rb (adev); +if (adev->gfx.num_gfx_rings) +gfx_v9_0_setup_rb (adev);gfx_v9_0_get_cu_info (adev, &adev->gfx.cu_info); adev->gfx.config.db_debug2 =RREG32_SOC15 (GC ,0 , mmDB_DEBUG2);
drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c +1 -0
@@ -178,6 +178,7 @@ static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev) tmp =REG_SET_FIELD (tmp,VM_L2_CNTL2 ,INVALIDATE_L2_CACHE ,1 );WREG32_SOC15 (MMHUB ,0 , mmVM_L2_CNTL2, tmp); + tmp = mmVM_L2_CNTL3_DEFAULT;if (adev->gmc.translate_further) { tmp =REG_SET_FIELD (tmp,VM_L2_CNTL3 ,BANK_SELECT ,12 ); tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3,
drivers/gpu/drm/drm_gem.c +1 -16
@@ -166,21 +166,6 @@ void drm_gem_private_object_init(struct drm_device *dev, }EXPORT_SYMBOL (drm_gem_private_object_init); -static void -drm_gem_remove_prime_handles (struct drm_gem_object *obj,struct drm_file *filp) -{ -/* -* Note: obj->dma_buf can't disappear as long as we still hold a -* handle reference in obj->handle_count. -*/ -mutex_lock (&filp->prime.lock); -if (obj->dma_buf) { -drm_prime_remove_buf_handle_locked (&filp->prime, - obj->dma_buf); - } -mutex_unlock (&filp->prime.lock); -} -/** * drm_gem_object_handle_free - release resources bound to userspace handles * @obj: GEM object to clean up.
@@ -254,7 +239,7 @@ drm_gem_object_release_handle(int id, void *ptr, void *data)else if (dev->driver->gem_close_object) dev->driver->gem_close_object (obj, file_priv); -drm_gem_remove_prime_handles (obj, file_priv); +drm_prime_remove_buf_handle (&file_priv->prime, id);drm_vma_node_revoke (&obj->vma_node, file_priv);drm_gem_object_handle_put_unlocked (obj);
drivers/gpu/drm/drm_internal.h +2 -2
@@ -86,8 +86,8 @@ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,void drm_prime_init_file_private (struct drm_prime_file_private *prime_fpriv);void drm_prime_destroy_file_private (struct drm_prime_file_private *prime_fpriv); -void drm_prime_remove_buf_handle_locked (struct drm_prime_file_private *prime_fpriv, -struct dma_buf *dma_buf); +void drm_prime_remove_buf_handle (struct drm_prime_file_private *prime_fpriv, +uint32_t handle);/* drm_drv.c */ struct drm_minor *drm_minor_acquire (unsigned int minor_id);
drivers/gpu/drm/drm_prime.c +12 -8
@@ -187,29 +187,33 @@ static int drm_prime_lookup_buf_handle(struct drm_prime_file_private *prime_fprireturn -ENOENT ; } -void drm_prime_remove_buf_handle_locked (struct drm_prime_file_private *prime_fpriv, -struct dma_buf *dma_buf) +void drm_prime_remove_buf_handle (struct drm_prime_file_private *prime_fpriv, +uint32_t handle) {struct rb_node *rb; - rb = prime_fpriv->dmabufs.rb_node; +mutex_lock (&prime_fpriv->lock); + + rb = prime_fpriv->handles.rb_node;while (rb) {struct drm_prime_member *member; - member = rb_entry(rb, struct drm_prime_member, dmabuf_rb); -if (member->dma_buf == dma_buf) { + member = rb_entry(rb, struct drm_prime_member, handle_rb); +if (member->handle == handle) {rb_erase (&member->handle_rb, &prime_fpriv->handles);rb_erase (&member->dmabuf_rb, &prime_fpriv->dmabufs); -dma_buf_put (dma_buf); +dma_buf_put (member->dma_buf);kfree (member); -return ; - }else if (member->dma_buf < dma_buf) { +break ; + }else if (member->handle < handle) { rb = rb->rb_right; }else { rb = rb->rb_left; } } + +mutex_unlock (&prime_fpriv->lock); }void drm_prime_init_file_private (struct drm_prime_file_private *prime_fpriv)
drivers/gpu/drm/i915/display/intel_dp_link_training.c +22 -0
@@ -163,6 +163,28 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp)intel_dp_compute_rate (intel_dp, intel_dp->link_rate, &link_bw, &rate_select); +/* +* WaEdpLinkRateDataReload +* +* Parade PS8461E MUX (used on varius TGL+ laptops) needs +* to snoop the link rates reported by the sink when we +* use LINK_RATE_SET in order to operate in jitter cleaning +* mode (as opposed to redriver mode). Unfortunately it +* loses track of the snooped link rates when powered down, +* so we need to make it re-snoop often. Without this high +* link rates are not stable. +*/ +if (!link_bw) { +struct intel_connector *connector = intel_dp->attached_connector; +__le16 sink_rates[DP_MAX_SUPPORTED_RATES ]; + +drm_dbg_kms (&i915->drm,"[CONNECTOR:%d:%s] Reloading eDP link rates\n" , + connector->base.base.id, connector->base.name); + +drm_dp_dpcd_read (&intel_dp->aux,DP_SUPPORTED_LINK_RATES , + sink_rates,sizeof (sink_rates)); + } +if (link_bw)drm_dbg_kms (&i915->drm,"Using LINK_BW_SET value %02x\n" , link_bw);
drivers/gpu/drm/radeon/radeon_device.c +3 -0
@@ -1623,6 +1623,9 @@ int radeon_suspend_kms(struct drm_device *dev, bool suspend,if (r) {/* delay GPU reset to resume */ radeon_fence_driver_force_completion (rdev, i); + }else { +/* finish executing delayed work */ +flush_delayed_work (&rdev->fence_drv[i].lockup_work); } }
drivers/hwmon/mr75203.c +50 -22
151 lines not on this page · raw message
drivers/infiniband/core/cma.c +2 -2
@@ -1722,8 +1722,8 @@ cma_ib_id_from_event(struct ib_cm_id *cm_id, }if (!validate_net_dev (*net_dev, - (struct sockaddr *)&req->listen_addr_storage, - (struct sockaddr *)&req->src_addr_storage)) { + (struct sockaddr *)&req->src_addr_storage, + (struct sockaddr *)&req->listen_addr_storage)) { id_priv =ERR_PTR (-EHOSTUNREACH ); goto err; }
drivers/infiniband/core/umem_odp.c +1 -1
@@ -466,7 +466,7 @@ int ib_umem_odp_map_dma_and_lock(struct ib_umem_odp *umem_odp, u64 user_virt,mutex_unlock (&umem_odp->umem_mutex); out_put_mm: -mmput (owning_mm); +mmput_async (owning_mm); out_put_task:if (owning_process)put_task_struct (owning_process);
drivers/infiniband/hw/hns/hns_roce_hw_v2.h +1 -1
@@ -92,7 +92,7 @@#define HNS_ROCE_V2_QPC_TIMER_ENTRY_SZ PAGE_SIZE#define HNS_ROCE_V2_CQC_TIMER_ENTRY_SZ PAGE_SIZE -#define HNS_ROCE_V2_PAGE_SIZE_SUPPORTED 0xFFFFF000 +#define HNS_ROCE_V2_PAGE_SIZE_SUPPORTED 0xFFFF000#define HNS_ROCE_V2_MAX_INNER_MTPT_NUM 2#define HNS_ROCE_INVALID_LKEY 0x100#define HNS_ROCE_CMQ_TX_TIMEOUT 30000
drivers/infiniband/hw/hns/hns_roce_qp.c +2 -5
@@ -386,11 +386,8 @@ static int set_rq_size(struct hns_roce_dev *hr_dev, struct ib_qp_cap *cap, hr_qp->rq.max_gs =roundup_pow_of_two (max (1U , cap->max_recv_sge)); -if (hr_dev->caps.max_rq_sg <=HNS_ROCE_SGE_IN_WQE ) - hr_qp->rq.wqe_shift =ilog2 (hr_dev->caps.max_rq_desc_sz); -else - hr_qp->rq.wqe_shift =ilog2 (hr_dev->caps.max_rq_desc_sz * - hr_qp->rq.max_gs); + hr_qp->rq.wqe_shift =ilog2 (hr_dev->caps.max_rq_desc_sz * + hr_qp->rq.max_gs); hr_qp->rq.wqe_cnt = cnt;if (hr_dev->caps.flags &HNS_ROCE_CAP_FLAG_RQ_INLINE )
drivers/infiniband/hw/mlx5/mad.c +6 -0
@@ -166,6 +166,12 @@ static int process_pma_cmd(struct mlx5_ib_dev *dev, u8 port_num, mdev = dev->mdev; mdev_port_num =1 ; } +if (MLX5_CAP_GEN (dev->mdev, num_ports) ==1 ) { +/* set local port to one for Function-Per-Port HCA. */ + mdev = dev->mdev; + mdev_port_num =1 ; + } +/* Declaring support of extended counters */ if (in_mad->mad_hdr.attr_id ==IB_PMA_CLASS_PORT_INFO ) {struct ib_class_port_info cpi = {};
drivers/infiniband/sw/siw/siw_qp_tx.c +14 -4
@@ -29,7 +29,7 @@ static struct page *siw_get_pblpage(struct siw_mem *mem, u64 addr, int *idx)dma_addr_t paddr =siw_pbl_get_buffer (pbl, offset,NULL , idx);if (paddr) -return virt_to_page (paddr); +return virt_to_page ((void *)paddr);return NULL ; }
@@ -523,13 +523,23 @@ static int siw_tx_hdt(struct siw_iwarp_tx *c_tx, struct socket *s)kunmap (p); } }else { -u64 va = sge->laddr + sge_off; +/* +* Cast to an uintptr_t to preserve all 64 bits +* in sge->laddr. +*/ +uintptr_t va = (uintptr_t )(sge->laddr + sge_off); - page_array[seg] =virt_to_page (va &PAGE_MASK ); +/* +* virt_to_page() takes a (void *) pointer +* so cast to a (void *) meaning it will be 64 +* bits on a 64 bit platform and 32 bits on a +* 32 bit platform. +*/ + page_array[seg] =virt_to_page ((void *)(va &PAGE_MASK ));if (do_crc)crypto_shash_update ( c_tx->mpa_crc_hd, - (void *)(uintptr_t )va, + (void *)va, plen); }
drivers/iommu/amd/iommu.c +2 -1
@@ -923,7 +923,8 @@ static void build_completion_wait(struct iommu_cmd *cmd,memset (cmd,0 ,sizeof (*cmd)); cmd->data[0 ] =lower_32_bits (paddr) |CMD_COMPL_WAIT_STORE_MASK ; cmd->data[1 ] =upper_32_bits (paddr); - cmd->data[2 ] = data; + cmd->data[2 ] =lower_32_bits (data); + cmd->data[3 ] =upper_32_bits (data);CMD_SET_TYPE (cmd,CMD_COMPL_WAIT ); }
drivers/net/ethernet/intel/i40e/i40e_client.c +4 -1
@@ -178,6 +178,10 @@ void i40e_notify_client_of_netdev_close(struct i40e_vsi *vsi, bool reset) "Cannot locate client instance close routine\n");return ; } +if (!test_bit (__I40E_CLIENT_INSTANCE_OPENED, &cdev->state)) { +dev_dbg (&pf->pdev->dev,"Client is not open, abort close\n" ); +return ; + } cdev->client->ops->close (&cdev->lan_info, cdev->client, reset);clear_bit (__I40E_CLIENT_INSTANCE_OPENED, &cdev->state);i40e_client_release_qvlist (&cdev->lan_info);
@@ -374,7 +378,6 @@ void i40e_client_subtask(struct i40e_pf *pf)/* Remove failed client instance */ clear_bit (__I40E_CLIENT_INSTANCE_OPENED, &cdev->state); -i40e_client_del_instance (pf);return ; } }
drivers/net/ethernet/intel/ice/ice_main.c +1 -1
@@ -3404,7 +3404,7 @@ static int ice_init_pf(struct ice_pf *pf) pf->avail_rxqs =bitmap_zalloc (pf->max_pf_rxqs,GFP_KERNEL );if (!pf->avail_rxqs) { -devm_kfree (ice_pf_to_dev (pf), pf->avail_txqs); +bitmap_free (pf->avail_txqs); pf->avail_txqs =NULL ;return -ENOMEM ; }
drivers/net/wireless/intel/iwlegacy/4965-rs.c +1 -4
@@ -2403,7 +2403,7 @@ il4965_rs_fill_link_cmd(struct il_priv *il, struct il_lq_sta *lq_sta,/* Repeat initial/next rate. * For legacy IL_NUMBER_TRY == 1, this loop will not execute. * For HT IL_HT_NUMBER_TRY == 3, this executes twice. */ -while (repeat_rate >0 ) { +while (repeat_rate >0 && idx < (LINK_QUAL_MAX_RETRY_NUM -1 )) {if (is_legacy (tbl_type.lq_type)) {if (ant_toggle_cnt <NUM_TRY_BEFORE_ANT_TOGGLE ) ant_toggle_cnt++;
@@ -2422,8 +2422,6 @@ il4965_rs_fill_link_cmd(struct il_priv *il, struct il_lq_sta *lq_sta,cpu_to_le32 (new_rate); repeat_rate--; idx++; -if (idx >=LINK_QUAL_MAX_RETRY_NUM ) - goto out; } il4965_rs_get_tbl_info_from_mcs(new_rate, lq_sta->band,
@@ -2468,7 +2466,6 @@ il4965_rs_fill_link_cmd(struct il_priv *il, struct il_lq_sta *lq_sta, repeat_rate--; } -out: lq_cmd->agg_params.agg_frame_cnt_limit =LINK_QUAL_AGG_FRAME_LIMIT_DEF ; lq_cmd->agg_params.agg_dis_start_th =LINK_QUAL_AGG_DISABLE_START_DEF ;
drivers/net/xen-netback/xenbus.c +1 -1
@@ -256,7 +256,6 @@ static void backend_disconnect(struct backend_info *be)unsigned int queue_index;xen_unregister_watchers (vif); -xenbus_rm (XBT_NIL , be->dev->nodename,"hotplug-status" );#ifdef CONFIG_DEBUG_FS xenvif_debugfs_delif (vif);#endif /* CONFIG_DEBUG_FS */
@@ -984,6 +983,7 @@ static int netback_remove(struct xenbus_device *dev)struct backend_info *be =dev_get_drvdata (&dev->dev);unregister_hotplug_status_watch (be); +xenbus_rm (XBT_NIL , dev->nodename,"hotplug-status" );if (be->vif) {kobject_uevent (&dev->dev.kobj,KOBJ_OFFLINE );backend_disconnect (be);
drivers/nvme/host/tcp.c +2 -5
@@ -118,7 +118,6 @@ struct nvme_tcp_queue {struct mutex send_mutex;struct llist_head req_list;struct list_head send_list; -bool more_requests;/* recv state */ void *pdu;
@@ -314,7 +313,7 @@ static inline void nvme_tcp_send_all(struct nvme_tcp_queue *queue)static inline bool nvme_tcp_queue_more (struct nvme_tcp_queue *queue) {return !list_empty (&queue->send_list) || - !llist_empty (&queue->req_list) || queue->more_requests; + !llist_empty (&queue->req_list); } static inline void nvme_tcp_queue_request(struct nvme_tcp_request *req,
@@ -333,9 +332,7 @@ static inline void nvme_tcp_queue_request(struct nvme_tcp_request *req,*/ if (queue->io_cpu ==raw_smp_processor_id () && sync && empty &&mutex_trylock (&queue->send_mutex)) { - queue->more_requests = !last;nvme_tcp_send_all (queue); - queue->more_requests = false;mutex_unlock (&queue->send_mutex); }
@@ -1196,7 +1193,7 @@ static void nvme_tcp_io_work(struct work_struct *w)else if (unlikely (result <0 ))return ; -if (!pending) +if (!pending || !queue->rd_enabled)return ; }while (!time_after (jiffies, deadline));/* quota is exhausted */
drivers/nvme/target/core.c +4 -2
@@ -730,6 +730,8 @@ static void nvmet_set_error(struct nvmet_req *req, u16 status)static void __nvmet_req_complete (struct nvmet_req *req,u16 status) { +struct nvmet_ns *ns = req->ns; +if (!req->sq->sqhd_disabled)nvmet_update_sq_head (req); req->cqe->sq_id =cpu_to_le16 (req->sq->qid);
@@ -740,9 +742,9 @@ static void __nvmet_req_complete(struct nvmet_req *req, u16 status)trace_nvmet_req_complete (req); -if (req->ns) -nvmet_put_namespace (req->ns); req->ops->queue_response (req); +if (ns) +nvmet_put_namespace (ns); }void nvmet_req_complete (struct nvmet_req *req,u16 status)
drivers/parisc/ccio-dma.c +8 -3
@@ -1380,15 +1380,17 @@ ccio_init_resource(struct resource *res, char *name, void __iomem *ioaddr) } } -static void __init ccio_init_resources (struct ioc *ioc) +static int __init ccio_init_resources (struct ioc *ioc) {struct resource *res = ioc->mmio_region;char *name =kmalloc (14 ,GFP_KERNEL ); - +if (unlikely (!name)) +return -ENOMEM ;snprintf (name,14 ,"GSC Bus [%d/]" , ioc->hw_path);ccio_init_resource (res, name, &ioc->ioc_regs->io_io_low);ccio_init_resource (res +1 , name, &ioc->ioc_regs->io_io_low_hv); +return 0 ; } static int new_ioc_area(struct resource *res, unsigned long size,
@@ -1543,7 +1545,10 @@ static int __init ccio_probe(struct parisc_device *dev)return -ENOMEM ; }ccio_ioc_init (ioc); -ccio_init_resources (ioc); +if (ccio_init_resources (ioc)) { +kfree (ioc); +return -ENOMEM ; + } hppa_dma_ops = &ccio_ops; hba =kzalloc (sizeof (*hba),GFP_KERNEL );
drivers/regulator/core.c +7 -2
@@ -2596,13 +2596,18 @@ static int _regulator_do_enable(struct regulator_dev *rdev)*/ static int _regulator_handle_consumer_enable (struct regulator *regulator) { +int ret;struct regulator_dev *rdev = regulator->rdev;lockdep_assert_held_once (&rdev->mutex.base); regulator->enable_count++; -if (regulator->uA_load && regulator->enable_count ==1 ) -return drms_uA_update (rdev); +if (regulator->uA_load && regulator->enable_count ==1 ) { + ret =drms_uA_update (rdev); +if (ret) + regulator->enable_count--; +return ret; + }return 0 ; }
drivers/scsi/lpfc/lpfc_init.c +4 -1
@@ -6670,7 +6670,7 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)/* Allocate device driver memory */ rc =lpfc_mem_alloc (phba,SGL_ALIGN_SZ );if (rc) -return -ENOMEM ; + goto out_destroy_workqueue;/* IF Type 2 ports get initialized now. */ if (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) >=
@@ -7076,6 +7076,9 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba)lpfc_destroy_bootstrap_mbox (phba); out_free_mem:lpfc_mem_free (phba); +out_destroy_workqueue: +destroy_workqueue (phba->wq); + phba->wq =NULL ;return rc; }
drivers/scsi/megaraid/megaraid_sas_fusion.c +0 -1
@@ -5198,7 +5198,6 @@ megasas_alloc_fusion_context(struct megasas_instance *instance)if (!fusion->log_to_span) {dev_err (&instance->pdev->dev,"Failed from %s %d\n" , __func__, __LINE__); -kfree (instance->ctrl_context);return -ENOMEM ; } }
drivers/scsi/mpt3sas/mpt3sas_scsih.c +1 -1
@@ -3501,6 +3501,7 @@ static struct fw_event_work *dequeue_next_fw_event(struct MPT3SAS_ADAPTER *ioc) fw_event =list_first_entry (&ioc->fw_event_list, struct fw_event_work, list);list_del_init (&fw_event->list); +fw_event_work_put (fw_event); }spin_unlock_irqrestore (&ioc->fw_event_lock, flags);
@@ -3559,7 +3560,6 @@ _scsih_fw_event_cleanup_queue(struct MPT3SAS_ADAPTER *ioc)if (cancel_work_sync (&fw_event->work))fw_event_work_put (fw_event); -fw_event_work_put (fw_event); } ioc->fw_events_cleanup =0 ; }
drivers/scsi/qla2xxx/qla_target.c +2 -8
@@ -6817,14 +6817,8 @@ qlt_24xx_config_rings(struct scsi_qla_host *vha)if (ha->flags.msix_enabled) {if (IS_QLA83XX (ha) ||IS_QLA27XX (ha) ||IS_QLA28XX (ha)) { -if (IS_QLA2071 (ha)) { -/* 4 ports Baker: Enable Interrupt Handshake */ - icb->msix_atio =0 ; - icb->firmware_options_2 |=cpu_to_le32 (BIT_26 ); - }else { - icb->msix_atio =cpu_to_le16 (msix->entry); - icb->firmware_options_2 &=cpu_to_le32 (~BIT_26 ); - } + icb->msix_atio =cpu_to_le16 (msix->entry); + icb->firmware_options_2 &=cpu_to_le32 (~BIT_26 );ql_dbg (ql_dbg_init, vha,0xf072 ,"Registering ICB vector 0x%x for atio que.\n" , msix->entry);
drivers/soc/bcm/brcmstb/pm/pm-arm.c +39 -11
126 lines not on this page · raw message
drivers/tee/tee_shm.c +1 -0
@@ -9,6 +9,7 @@#include <linux/sched.h> #include <linux/slab.h> #include <linux/tee_drv.h> +#include <linux/uaccess.h> #include <linux/uio.h> #include "tee_private.h"
drivers/tty/n_gsm.c +21 -25
167 lines not on this page · raw message
drivers/video/fbdev/chipsfb.c +1 -0
@@ -430,6 +430,7 @@ static int chipsfb_pci_init(struct pci_dev *dp, const struct pci_device_id *ent) err_release_fb:framebuffer_release (p); err_disable: +pci_disable_device (dp); err_out:return rc; }
fs/afs/flock.c +1 -1
@@ -76,7 +76,7 @@ void afs_lock_op_done(struct afs_call *call)if (call->error ==0 ) {spin_lock (&vnode->lock);trace_afs_flock_ev (vnode,NULL , afs_flock_timestamp,0 ); - vnode->locked_at = call->reply_time; + vnode->locked_at = call->issue_time;afs_schedule_lock_extension (vnode);spin_unlock (&vnode->lock); }
fs/afs/fsclient.c +1 -1
@@ -130,7 +130,7 @@ static void xdr_decode_AFSFetchStatus(const __be32 **_bp,static time64_t xdr_decode_expiry (struct afs_call *call,u32 expiry) { -return ktime_divns (call->reply_time,NSEC_PER_SEC ) + expiry; +return ktime_divns (call->issue_time,NSEC_PER_SEC ) + expiry; } static void xdr_decode_AFSCallBack(const __be32 **_bp,
fs/afs/internal.h +1 -2
@@ -135,7 +135,6 @@ struct afs_call {bool need_attention;/* T if RxRPC poked us */ bool async;/* T if asynchronous */ bool upgrade;/* T to request service upgrade */ -bool have_reply_time;/* T if have got reply_time */ bool intr;/* T if interruptible */ bool unmarshalling_error;/* T if an unmarshalling error occurred */ u16 service_id;/* Actual service ID (after upgrade) */
@@ -149,7 +148,7 @@ struct afs_call { } __attribute__((packed));__be64 tmp64; }; -ktime_t reply_time;/* Time of first reply packet */ +ktime_t issue_time;/* Time of issue of operation */ };struct afs_call_type {
fs/afs/rxrpc.c +1 -6
@@ -429,6 +429,7 @@ void afs_make_call(struct afs_addr_cursor *ac, struct afs_call *call, gfp_t gfp)if (call->max_lifespan)rxrpc_kernel_set_max_life (call->net->socket, rxcall, call->max_lifespan); + call->issue_time =ktime_get_real ();/* send the request */ iov[0 ].iov_base = call->request;
@@ -533,12 +534,6 @@ static void afs_deliver_to_call(struct afs_call *call)return ; } -if (!call->have_reply_time && -rxrpc_kernel_get_reply_time (call->net->socket, - call->rxcall, - &call->reply_time)) - call->have_reply_time = true; - ret = call->type->deliver (call); state =READ_ONCE (call->state);if (ret ==0 && call->unmarshalling_error)
fs/afs/yfsclient.c +1 -2
@@ -239,8 +239,7 @@ static void xdr_decode_YFSCallBack(const __be32 **_bp,struct afs_callback *cb = &scb->callback;ktime_t cb_expiry; - cb_expiry = call->reply_time; - cb_expiry =ktime_add (cb_expiry,xdr_to_u64 (x->expiration_time) *100 ); + cb_expiry =ktime_add (call->issue_time,xdr_to_u64 (x->expiration_time) *100 ); cb->expires_at =ktime_divns (cb_expiry,NSEC_PER_SEC ); scb->have_cb = true; *_bp +=xdr_size (x);
fs/cifs/smb2file.c +0 -1
@@ -74,7 +74,6 @@ smb2_open_file(const unsigned int xid, struct cifs_open_parms *oparms, nr_ioctl_req.Reserved =0 ; rc =SMB2_ioctl (xid, oparms->tcon, fid->persistent_fid, fid->volatile_fid,FSCTL_LMR_REQUEST_RESILIENCY , - true/* is_fsctl */ , (char *)&nr_ioctl_req,sizeof (nr_ioctl_req), CIFSMaxBufSize,NULL ,NULL /* no return info */ );if (rc == -EOPNOTSUPP ) {
fs/cifs/smb2ops.c +18 -27
159 lines not on this page · raw message
fs/cifs/smb2pdu.c +9 -11
@@ -1081,7 +1081,7 @@ int smb3_validate_negotiate(const unsigned int xid, struct cifs_tcon *tcon) } rc =SMB2_ioctl (xid, tcon,NO_FILE_ID ,NO_FILE_ID , -FSCTL_VALIDATE_NEGOTIATE_INFO , true/* is_fsctl */ , +FSCTL_VALIDATE_NEGOTIATE_INFO , (char *)pneg_inbuf, inbuflen, CIFSMaxBufSize, (char **)&pneg_rsp, &rsplen);if (rc == -EOPNOTSUPP ) {
@@ -2922,7 +2922,7 @@ int SMB2_ioctl_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server, struct smb_rqst *rqst, u64 persistent_fid, u64 volatile_fid, u32 opcode, - bool is_fsctl, char *in_data, u32 indatalen, + char *in_data, u32 indatalen, __u32 max_response_size) { struct smb2_ioctl_req *req;
@@ -2997,10 +2997,8 @@ SMB2_ioctl_init(struct cifs_tcon *tcon, struct TCP_Server_Info *server, req->sync_hdr.CreditCharge =cpu_to_le16 (DIV_ROUND_UP (max (indatalen, max_response_size),SMB2_MAX_BUFFER_SIZE )); -if (is_fsctl) - req->Flags =cpu_to_le32 (SMB2_0_IOCTL_IS_FSCTL ); -else - req->Flags =0 ; +/* always an FSCTL (for now) */ + req->Flags =cpu_to_le32 (SMB2_0_IOCTL_IS_FSCTL );/* validate negotiate request must be signed - see MS-SMB2 3.2.5.5 */ if (opcode ==FSCTL_VALIDATE_NEGOTIATE_INFO )
@@ -3027,9 +3025,9 @@ SMB2_ioctl_free(struct smb_rqst *rqst)*/ int SMB2_ioctl (const unsigned int xid,struct cifs_tcon *tcon,u64 persistent_fid, -u64 volatile_fid,u32 opcode,bool is_fsctl, -char *in_data,u32 indatalen,u32 max_out_data_len, -char **out_data,u32 *plen/* returned data len */ ) +u64 volatile_fid,u32 opcode,char *in_data,u32 indatalen, +u32 max_out_data_len,char **out_data, +u32 *plen/* returned data len */ ) {struct smb_rqst rqst;struct smb2_ioctl_rsp *rsp =NULL ;
@@ -3071,7 +3069,7 @@ SMB2_ioctl(const unsigned int xid, struct cifs_tcon *tcon, u64 persistent_fid, rc =SMB2_ioctl_init (tcon, server, &rqst, persistent_fid, volatile_fid, opcode, - is_fsctl, in_data, indatalen, max_out_data_len); + in_data, indatalen, max_out_data_len);if (rc) goto ioctl_exit;
@@ -3153,7 +3151,7 @@ SMB2_set_compression(const unsigned int xid, struct cifs_tcon *tcon,cpu_to_le16 (COMPRESSION_FORMAT_DEFAULT ); rc =SMB2_ioctl (xid, tcon, persistent_fid, volatile_fid, -FSCTL_SET_COMPRESSION , true/* is_fsctl */ , +FSCTL_SET_COMPRESSION , (char *)&fsctl_input/* data input */ ,2 /* in data len */ , CIFSMaxBufSize/* max out data */ , &ret_data/* out data */ ,NULL );
fs/cifs/smb2proto.h +2 -2
@@ -155,13 +155,13 @@ extern int SMB2_open_init(struct cifs_tcon *tcon,extern void SMB2_open_free (struct smb_rqst *rqst);extern int SMB2_ioctl (const unsigned int xid,struct cifs_tcon *tcon,u64 persistent_fid,u64 volatile_fid,u32 opcode, -bool is_fsctl,char *in_data,u32 indatalen,u32 maxoutlen, +char *in_data,u32 indatalen,u32 maxoutlen,char **out_data,u32 *plen/* returned data len */ );extern int SMB2_ioctl_init (struct cifs_tcon *tcon,struct TCP_Server_Info *server,struct smb_rqst *rqst,u64 persistent_fid,u64 volatile_fid,u32 opcode, -bool is_fsctl,char *in_data,u32 indatalen, +char *in_data,u32 indatalen,__u32 max_response_size);extern void SMB2_ioctl_free (struct smb_rqst *rqst); extern int SMB2_change_notify(const unsigned int xid, struct cifs_tcon *tcon,
fs/debugfs/inode.c +22 -0
@@ -730,6 +730,28 @@ void debugfs_remove(struct dentry *dentry) }EXPORT_SYMBOL_GPL (debugfs_remove); +/** +* debugfs_lookup_and_remove - lookup a directory or file and recursively remove it +* @name: a pointer to a string containing the name of the item to look up. +* @parent: a pointer to the parent dentry of the item. +* +* This is the equlivant of doing something like +* debugfs_remove(debugfs_lookup(..)) but with the proper reference counting +* handled for the directory being looked up. +*/ +void debugfs_lookup_and_remove (const char *name,struct dentry *parent) +{ +struct dentry *dentry; + + dentry =debugfs_lookup (name, parent); +if (!dentry) +return ; + +debugfs_remove (dentry); +dput (dentry); +} +EXPORT_SYMBOL_GPL (debugfs_lookup_and_remove); +/** * debugfs_rename - rename a file/directory in the debugfs filesystem * @old_dir: a pointer to the parent dentry for the renamed object. This
fs/nfsd/vfs.c +4 -0
@@ -1014,6 +1014,10 @@ nfsd_vfs_write(struct svc_rqst *rqstp, struct svc_fh *fhp, struct nfsd_file *nf,iov_iter_kvec (&iter,WRITE , vec, vlen, *cnt); since =READ_ONCE (file->f_wb_err);if (flags &RWF_SYNC ) { +if (verf) +nfsd_copy_boot_verifier (verf, +net_generic (SVC_NET (rqstp), + nfsd_net_id)); host_err =vfs_iter_write (file, &iter, &pos, flags);if (host_err <0 ) nfsd_reset_boot_verifier(net_generic(SVC_NET(rqstp),
include/linux/buffer_head.h +11 -0
@@ -136,6 +136,17 @@ BUFFER_FNS(Defer_Completion, defer_completion) static __always_inline void set_buffer_uptodate(struct buffer_head *bh) { +/* +* If somebody else already set this uptodate, they will +* have done the memory barrier, and a reader will thus +* see *some* valid buffer state. +* +* Any other serialization (with IO errors or whatever that +* might clear the bit) has to come from other state (eg BH_Lock). +*/ +if (test_bit (BH_Uptodate, &bh->b_state)) +return ; +/* * make it consistent with folio_mark_uptodate * pairs with smp_load_acquire in buffer_uptodate
include/linux/debugfs.h +6 -0
@@ -91,6 +91,8 @@ struct dentry *debugfs_create_automount(const char *name,void debugfs_remove (struct dentry *dentry);#define debugfs_remove_recursive debugfs_remove +void debugfs_lookup_and_remove (const char *name,struct dentry *parent); +const struct file_operations *debugfs_real_fops (const struct file *filp);int debugfs_file_get (struct dentry *dentry);
@@ -220,6 +222,10 @@ static inline void debugfs_remove(struct dentry *dentry)static inline void debugfs_remove_recursive (struct dentry *dentry) { } +static inline void debugfs_lookup_and_remove (const char *name, +struct dentry *parent) +{ } +const struct file_operations *debugfs_real_fops (const struct file *filp);static inline int debugfs_file_get (struct dentry *dentry)
kernel/cgroup/cgroup.c +63 -22
159 lines not on this page · raw message
kernel/cgroup/cpuset.c +1 -2
@@ -2212,7 +2212,7 @@ static void cpuset_attach(struct cgroup_taskset *tset)cgroup_taskset_first (tset, &css); cs =css_cs (css); -cpus_read_lock (); +lockdep_assert_cpus_held ();/* see cgroup_attach_lock() */ percpu_down_write (&cpuset_rwsem);/* prepare for attach */
@@ -2268,7 +2268,6 @@ static void cpuset_attach(struct cgroup_taskset *tset)wake_up (&cpuset_attach_wq);percpu_up_write (&cpuset_rwsem); -cpus_read_unlock (); }/* The various types of files and directories in a cpuset file system */
kernel/dma/swiotlb.c +4 -1
@@ -452,7 +452,10 @@ static void swiotlb_bounce(phys_addr_t orig_addr, phys_addr_t tlb_addr, } } -#define slot_addr (start, idx) ((start) + ((idx) << IO_TLB_SHIFT)) +static inline phys_addr_t slot_addr (phys_addr_t start,phys_addr_t idx) +{ +return start + (idx <<IO_TLB_SHIFT ); +}/* * Return the offset into a iotlb slot required to keep the device happy.
kernel/fork.c +1 -0
@@ -1127,6 +1127,7 @@ void mmput_async(struct mm_struct *mm) schedule_work(&mm->async_put_work); } } +EXPORT_SYMBOL_GPL (mmput_async);#endif /**
kernel/kprobes.c +1 -0
@@ -1642,6 +1642,7 @@ static int check_kprobe_address_safe(struct kprobe *p,/* Ensure it is not in reserved area nor out of text */ if (!(core_kernel_text((unsigned long) p->addr) || is_module_text_address((unsigned long) p->addr)) || + in_gate_area_no_mm((unsigned long) p->addr) || within_kprobe_blacklist((unsigned long) p->addr) || jump_label_text_reserved(p->addr, p->addr) || static_call_text_reserved(p->addr, p->addr) ||
mm/kmemleak.c +4 -4
@@ -1123,7 +1123,7 @@ EXPORT_SYMBOL(kmemleak_no_scan);void __ref kmemleak_alloc_phys (phys_addr_t phys,size_t size,int min_count,gfp_t gfp) { -if (PHYS_PFN (phys) >= min_low_pfn &&PHYS_PFN (phys) < max_low_pfn) +if (!IS_ENABLED (CONFIG_HIGHMEM ) ||PHYS_PFN (phys) < max_low_pfn)kmemleak_alloc (__va (phys), size, min_count, gfp); }EXPORT_SYMBOL (kmemleak_alloc_phys);
@@ -1137,7 +1137,7 @@ EXPORT_SYMBOL(kmemleak_alloc_phys);*/ void __ref kmemleak_free_part_phys (phys_addr_t phys,size_t size) { -if (PHYS_PFN (phys) >= min_low_pfn &&PHYS_PFN (phys) < max_low_pfn) +if (!IS_ENABLED (CONFIG_HIGHMEM ) ||PHYS_PFN (phys) < max_low_pfn)kmemleak_free_part (__va (phys), size); }EXPORT_SYMBOL (kmemleak_free_part_phys);
@@ -1149,7 +1149,7 @@ EXPORT_SYMBOL(kmemleak_free_part_phys);*/ void __ref kmemleak_not_leak_phys (phys_addr_t phys) { -if (PHYS_PFN (phys) >= min_low_pfn &&PHYS_PFN (phys) < max_low_pfn) +if (!IS_ENABLED (CONFIG_HIGHMEM ) ||PHYS_PFN (phys) < max_low_pfn)kmemleak_not_leak (__va (phys)); }EXPORT_SYMBOL (kmemleak_not_leak_phys);
@@ -1161,7 +1161,7 @@ EXPORT_SYMBOL(kmemleak_not_leak_phys);*/ void __ref kmemleak_ignore_phys (phys_addr_t phys) { -if (PHYS_PFN (phys) >= min_low_pfn &&PHYS_PFN (phys) < max_low_pfn) +if (!IS_ENABLED (CONFIG_HIGHMEM ) ||PHYS_PFN (phys) < max_low_pfn)kmemleak_ignore (__va (phys)); }EXPORT_SYMBOL (kmemleak_ignore_phys);
net/bridge/br_netfilter_hooks.c +2 -0
@@ -384,6 +384,7 @@ static int br_nf_pre_routing_finish(struct net *net, struct sock *sk, struct sk_/* - Bridged-and-DNAT'ed traffic doesn't * require ip_forwarding. */ if (rt->dst.dev == dev) { +skb_dst_drop (skb);skb_dst_set (skb, &rt->dst); goto bridged_dnat; }
@@ -413,6 +414,7 @@ static int br_nf_pre_routing_finish(struct net *net, struct sock *sk, struct sk_kfree_skb (skb);return 0 ; } +skb_dst_drop (skb);skb_dst_set_noref (skb, &rt->dst); }
net/bridge/br_netfilter_ipv6.c +1 -0
@@ -197,6 +197,7 @@ static int br_nf_pre_routing_finish_ipv6(struct net *net, struct sock *sk, struckfree_skb (skb);return 0 ; } +skb_dst_drop (skb);skb_dst_set_noref (skb, &rt->dst); }
net/core/skbuff.c +2 -3
@@ -3986,9 +3986,8 @@ struct sk_buff *skb_segment(struct sk_buff *head_skb,SKB_GSO_CB (nskb)->csum_start =skb_headroom (nskb) + doffset; }else { -skb_copy_bits (head_skb, offset, -skb_put (nskb, len), - len); +if (skb_copy_bits (head_skb, offset,skb_put (nskb, len), len)) + goto err; }continue ; }
net/ipv4/tcp_input.c +18 -7
@@ -2496,6 +2496,21 @@ static inline bool tcp_may_undo(const struct tcp_sock *tp)return tp->undo_marker && (!tp->undo_retrans ||tcp_packet_delayed (tp)); } +static bool tcp_is_non_sack_preventing_reopen (struct sock *sk) +{ +struct tcp_sock *tp =tcp_sk (sk); + +if (tp->snd_una == tp->high_seq &&tcp_is_reno (tp)) { +/* Hold old state until something *above* high_seq +* is ACKed. For Reno it is MUST to prevent false +* fast retransmits (RFC2582). SACK TCP is safe. */ +if (!tcp_any_retrans_done (sk)) + tp->retrans_stamp =0 ; +return true; + } +return false; +} +/* People celebrate: "We love our President!" */ static bool tcp_try_undo_recovery (struct sock *sk) {
@@ -2518,14 +2533,8 @@ static bool tcp_try_undo_recovery(struct sock *sk) }else if (tp->rack.reo_wnd_persist) { tp->rack.reo_wnd_persist--; } -if (tp->snd_una == tp->high_seq &&tcp_is_reno (tp)) { -/* Hold old state until something *above* high_seq -* is ACKed. For Reno it is MUST to prevent false -* fast retransmits (RFC2582). SACK TCP is safe. */ -if (!tcp_any_retrans_done (sk)) - tp->retrans_stamp =0 ; +if (tcp_is_non_sack_preventing_reopen (sk))return true; - }tcp_set_ca_state (sk, TCP_CA_Open); tp->is_sack_reneg =0 ;return false;
@@ -2561,6 +2570,8 @@ static bool tcp_try_undo_loss(struct sock *sk, bool frto_undo)NET_INC_STATS (sock_net (sk),LINUX_MIB_TCPSPURIOUSRTOS );inet_csk (sk)->icsk_retransmits =0 ; +if (tcp_is_non_sack_preventing_reopen (sk)) +return true;if (frto_undo ||tcp_is_sack (tp)) {tcp_set_ca_state (sk, TCP_CA_Open); tp->is_sack_reneg =0 ;
net/ipv6/seg6.c +5 -0
@@ -135,6 +135,11 @@ static int seg6_genl_sethmac(struct sk_buff *skb, struct genl_info *info) goto out_unlock; } +if (slen >nla_len (info->attrs[SEG6_ATTR_SECRET ])) { + err = -EINVAL ; + goto out_unlock; + } +if (hinfo) { err =seg6_hmac_info_del (net, hmackeyid);if (err)
net/netfilter/nf_conntrack_irc.c +3 -2
@@ -185,8 +185,9 @@ static int help(struct sk_buff *skb, unsigned int protoff,/* dcc_ip can be the internal OR external (NAT'ed) IP */ tuple = &ct->tuplehash[dir].tuple; -if (tuple->src.u3.ip != dcc_ip && - tuple->dst.u3.ip != dcc_ip) { +if ((tuple->src.u3.ip != dcc_ip && + ct->tuplehash[!dir].tuple.dst.u3.ip != dcc_ip) || + dcc_port ==0 ) {net_warn_ratelimited ("Forged DCC command from %pI4: %pI4:%u\n" , &tuple->src.u3.ip, &dcc_ip, dcc_port);
net/netfilter/nf_tables_api.c +3 -1
@@ -1971,8 +1971,10 @@ static int nft_basechain_init(struct nft_base_chain *basechain, u8 family, chain->flags |=NFT_CHAIN_BASE | flags; basechain->policy =NF_ACCEPT ;if (chain->flags &NFT_CHAIN_HW_OFFLOAD && - !nft_chain_offload_support (basechain)) + !nft_chain_offload_support (basechain)) { +list_splice_init (&basechain->hook_list, &hook->list);return -EOPNOTSUPP ; + }flow_block_init (&basechain->flow_block);
net/rxrpc/rxkad.c +1 -1
@@ -451,7 +451,7 @@ static int rxkad_verify_packet_2(struct rxrpc_call *call, struct sk_buff *skb,* directly into the target buffer. */ sg = _sg; - nsg =skb_shinfo (skb)->nr_frags; + nsg =skb_shinfo (skb)->nr_frags +1 ;if (nsg <=4 ) { nsg =4 ; }else {
net/sched/sch_sfb.c +8 -5
@@ -135,15 +135,15 @@ static void increment_one_qlen(u32 sfbhash, u32 slot, struct sfb_sched_data *q) } } -static void increment_qlen (const struct sk_buff *skb,struct sfb_sched_data *q) +static void increment_qlen (const struct sfb_skb_cb *cb,struct sfb_sched_data *q) {u32 sfbhash; - sfbhash =sfb_hash (skb,0 ); + sfbhash = cb->hashes[0 ];if (sfbhash)increment_one_qlen (sfbhash,0 , q); - sfbhash =sfb_hash (skb,1 ); + sfbhash = cb->hashes[1 ];if (sfbhash)increment_one_qlen (sfbhash,1 , q); }
@@ -281,8 +281,10 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch, {struct sfb_sched_data *q =qdisc_priv (sch); +unsigned int len =qdisc_pkt_len (skb);struct Qdisc *child = q->qdisc;struct tcf_proto *fl; +struct sfb_skb_cb cb;int i;u32 p_min = ~0 ;u32 minqlen = ~0 ;
@@ -399,11 +401,12 @@ static int sfb_enqueue(struct sk_buff *skb, struct Qdisc *sch, } enqueue: +memcpy (&cb,sfb_skb_cb (skb),sizeof (cb)); ret =qdisc_enqueue (skb, child, to_free);if (likely (ret ==NET_XMIT_SUCCESS )) { -qdisc_qstats_backlog_inc (sch, skb); + sch->qstats.backlog += len; sch->q.qlen++; -increment_qlen (skb, q); +increment_qlen (&cb, q); }else if (net_xmit_drop_count (ret)) { q->stats.childdrop++;qdisc_qstats_drop (sch);
net/tipc/monitor.c +1 -1
@@ -130,7 +130,7 @@ static void map_set(u64 *up_map, int i, unsigned int v)static int map_get (u64 up_map,int i) { -return (up_map & (1 << i)) >> i; +return (up_map & (1ULL << i)) >> i; }static struct tipc_peer *peer_prev (struct tipc_peer *peer)
sound/drivers/aloop.c +4 -3
@@ -606,17 +606,18 @@ static unsigned int loopback_jiffies_timer_pos_update cable->streams[SNDRV_PCM_STREAM_PLAYBACK ];struct loopback_pcm *dpcm_capt = cable->streams[SNDRV_PCM_STREAM_CAPTURE ]; -unsigned long delta_play =0 , delta_capt =0 ; +unsigned long delta_play =0 , delta_capt =0 , cur_jiffies;unsigned int running, count1, count2; + cur_jiffies = jiffies; running = cable->running ^ cable->pause;if (running & (1 <<SNDRV_PCM_STREAM_PLAYBACK )) { - delta_play = jiffies - dpcm_play->last_jiffies; + delta_play = cur_jiffies - dpcm_play->last_jiffies; dpcm_play->last_jiffies += delta_play; }if (running & (1 <<SNDRV_PCM_STREAM_CAPTURE )) { - delta_capt = jiffies - dpcm_capt->last_jiffies; + delta_capt = cur_jiffies - dpcm_capt->last_jiffies; dpcm_capt->last_jiffies += delta_capt; }
sound/pci/emu10k1/emupcm.c +1 -1
@@ -123,7 +123,7 @@ static int snd_emu10k1_pcm_channel_alloc(struct snd_emu10k1_pcm * epcm, int voic epcm->voices[0 ]->epcm = epcm;if (voices >1 ) {for (i =1 ; i < voices; i++) { - epcm->voices[i] = &epcm->emu->voices[epcm->voices[0 ]->number + i]; + epcm->voices[i] = &epcm->emu->voices[(epcm->voices[0 ]->number + i) %NUM_G ]; epcm->voices[i]->epcm = epcm; } }
sound/soc/atmel/mchp-spdiftx.c +1 -9
@@ -196,8 +196,7 @@ struct mchp_spdiftx_dev {struct clk *pclk;struct clk *gclk;unsigned int fmt; -const struct mchp_i2s_caps *caps; - int gclk_enabled:1; + unsigned int gclk_enabled:1; };static inline int mchp_spdiftx_is_running (struct mchp_spdiftx_dev *dev)
@@ -766,8 +765,6 @@ static const struct of_device_id mchp_spdiftx_dt_ids[] = {MODULE_DEVICE_TABLE (of, mchp_spdiftx_dt_ids);static int mchp_spdiftx_probe (struct platform_device *pdev) { -struct device_node *np = pdev->dev.of_node; -const struct of_device_id *match;struct mchp_spdiftx_dev *dev;struct resource *mem;struct regmap *regmap;
@@ -781,11 +778,6 @@ static int mchp_spdiftx_probe(struct platform_device *pdev)if (!dev)return -ENOMEM ; -/* Get hardware capabilities. */ - match =of_match_node (mchp_spdiftx_dt_ids, np); -if (match) - dev->caps = match->data; -/* Map I/O registers. */ base =devm_platform_get_and_ioremap_resource (pdev,0 , &mem);if (IS_ERR (base))
sound/usb/card.c +1 -1
@@ -667,7 +667,7 @@ static bool check_delayed_register_option(struct snd_usb_audio *chip, int iface)if (delayed_register[i] &&sscanf (delayed_register[i],"%x:%x" , &id, &inum) ==2 && id == chip->usb_id) -return inum != iface; +return iface < inum; }return false;
sound/usb/quirks.c +1 -1
@@ -1911,7 +1911,7 @@ bool snd_usb_registration_quirk(struct snd_usb_audio *chip, int iface)for (q = registration_quirks; q->usb_id; q++)if (chip->usb_id == q->usb_id) -return iface != q->interface; +return iface < q->interface;/* Register as normal */ return false;
sound/usb/stream.c +5 -4
@@ -496,6 +496,10 @@ static int __snd_usb_add_audio_stream(struct snd_usb_audio *chip,return 0 ; } } + +if (chip->card->registered) + chip->need_delayed_register = true; +/* look for an empty stream */ list_for_each_entry (as, &chip->pcm_list, list) {if (as->fmt_type != fp->fmt_type)
@@ -503,9 +507,6 @@ static int __snd_usb_add_audio_stream(struct snd_usb_audio *chip, subs = &as->substream[stream];if (subs->ep_num)continue ; -if (snd_device_get_state (chip->card, as->pcm) != -SNDRV_DEV_BUILD ) - chip->need_delayed_register = true; err =snd_pcm_new_stream (as->pcm, stream,1 );if (err <0 )return err;
@@ -1106,7 +1107,7 @@ static int __snd_usb_parse_audio_interface(struct snd_usb_audio *chip,* Dallas DS4201 workaround: It presents 5 altsettings, but the last * one misses syncpipe, and does not produce any sound. */ -if (chip->usb_id ==USB_ID (0x04fa ,0x4201 )) +if (chip->usb_id ==USB_ID (0x04fa ,0x4201 ) && num >=4 ) num =4 ;for (i =0 ; i < num; i++) {