Linux 5.10.211
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.211 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
------------
Makefile | 2 arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts | 1 arch/arm/boot/dts/bcm47189-luxul-xap-810.dts | 2 arch/arm/boot/dts/imx6sx.dtsi | 6 arch/arm/mach-ep93xx/core.c | 1 arch/arm64/boot/dts/rockchip/px30.dtsi | 2 arch/arm64/kvm/vgic/vgic-its.c | 5 arch/powerpc/kernel/hw_breakpoint.c | 76 arch/s390/pci/pci.c | 2 arch/x86/include/asm/cpu_entry_area.h | 2 arch/x86/include/asm/nospec-branch.h | 2 arch/x86/include/asm/text-patching.h | 30 arch/x86/include/asm/uaccess.h | 142 + arch/x86/kernel/alternative.c | 13 arch/x86/kernel/ftrace.c | 4 arch/x86/kernel/paravirt.c | 22 arch/x86/kernel/static_call.c | 2 arch/x86/net/bpf_jit_comp.c | 2 drivers/ata/ahci.c | 34 drivers/ata/ahci.h | 1 drivers/block/ataflop.c | 56 drivers/block/virtio_blk.c | 7 drivers/dma/fsl-qdma.c | 2 drivers/dma/sh/shdma.h | 2 drivers/dma/ti/edma.c | 10 drivers/firewire/core-card.c | 18 drivers/firmware/efi/arm-runtime.c | 2 drivers/firmware/efi/efi-init.c | 19 drivers/firmware/efi/riscv-runtime.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 1 drivers/gpu/drm/drm_syncobj.c | 16 drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c | 8 drivers/hwmon/coretemp.c | 2 drivers/infiniband/hw/bnxt_re/ib_verbs.c | 5 drivers/infiniband/hw/hfi1/pio.c | 6 drivers/infiniband/hw/hfi1/sdma.c | 2 drivers/infiniband/hw/qedr/verbs.c | 11 drivers/infiniband/ulp/srpt/ib_srpt.c | 17 drivers/input/serio/i8042-acpipnpio.h | 8 drivers/irqchip/irq-mips-gic.c | 2 drivers/md/dm-crypt.c | 6 drivers/media/pci/ttpci/av7110_av.c | 4 drivers/mtd/nand/spi/macronix.c | 20 drivers/net/ethernet/microchip/lan743x_ethtool.c | 9 drivers/net/gtp.c | 10 drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 14 drivers/net/wireless/intel/iwlwifi/mvm/mvm.h | 2 drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 10 drivers/nvme/host/fc.c | 47 drivers/nvme/target/fc.c | 11 drivers/nvme/target/fcloop.c | 6 drivers/nvme/target/tcp.c | 1 drivers/pci/msi.c | 2 drivers/platform/x86/intel-vbtn.c | 6 drivers/regulator/pwm-regulator.c | 3 drivers/s390/cio/device_ops.c | 6 drivers/scsi/Kconfig | 2 drivers/scsi/lpfc/lpfc_scsi.c | 12 drivers/soc/renesas/r8a77980-sysc.c | 3 drivers/spi/spi-hisi-sfc-v3xx.c | 5 drivers/spi/spi-sh-msiof.c | 16 drivers/target/target_core_device.c | 5 drivers/target/target_core_transport.c | 4 drivers/tty/hvc/hvc_xen.c | 19 drivers/usb/cdns3/gadget.c | 8 drivers/usb/gadget/function/f_ncm.c | 10 drivers/usb/roles/class.c | 29 drivers/video/fbdev/savage/savagefb_driver.c | 3 drivers/video/fbdev/sis/sis_main.c | 2 fs/afs/volume.c | 4 fs/aio.c | 9 fs/btrfs/ctree.h | 2 fs/btrfs/dir-item.c | 122 - fs/btrfs/inode.c | 48 fs/btrfs/tree-checker.c | 25 fs/btrfs/tree-log.c | 14 fs/cifs/smb2ops.c | 19 fs/cifs/smb2pdu.c | 93 - fs/cifs/smb2proto.h | 12 fs/erofs/decompressor.c | 24 fs/ext4/extents.c | 111 - fs/ext4/mballoc.c | 33 fs/jbd2/checkpoint.c | 137 - fs/zonefs/super.c | 68 include/linux/fs.h | 2 include/linux/lockdep.h | 5 include/linux/sched/task_stack.h | 2 include/linux/socket.h | 5 include/net/tcp.h | 2 kernel/sched/rt.c | 10 kernel/seccomp.c | 10 kernel/sysctl.c | 4 mm/userfaultfd.c | 14 net/core/dev.c | 2 net/core/dev_ioctl.c | 2 net/hsr/hsr_framereg.c | 16 net/hsr/hsr_framereg.h | 1 net/ipv4/arp.c | 3 net/ipv4/devinet.c | 21 net/ipv6/addrconf.c | 21 net/ipv6/seg6.c | 20 net/l2tp/l2tp_ip6.c | 2 net/mac80211/sta_info.c | 2 net/mac80211/tx.c | 2 net/mptcp/diag.c | 6 net/netfilter/nf_conntrack_proto_sctp.c | 2 net/netfilter/nf_tables_api.c | 1 net/packet/af_packet.c | 12 net/sched/Kconfig | 42 net/sched/Makefile | 3 net/sched/sch_atm.c | 709 -------- net/sched/sch_cbq.c | 1816 ---------------------- net/sched/sch_dsmark.c | 521 ------ net/tls/tls_main.c | 2 net/tls/tls_sw.c | 12 net/wireless/nl80211.c | 1 scripts/bpf_helpers_doc.py | 2 sound/soc/fsl/fsl_micfil.c | 15 sound/soc/intel/boards/bytcht_es8316.c | 14 sound/soc/intel/boards/bytcr_rt5640.c | 46 sound/soc/intel/boards/bytcr_rt5651.c | 41 sound/soc/sunxi/sun4i-spdif.c | 5 123 files changed, 1257 insertions(+), 3684 deletions(-)
Andrew Bresticker (2):
efi: runtime: Fix potential overflow of soft-reserved region size
efi: Don't add memblocks for soft-reserved memory
Andy Shevchenko (1):
ASoC: Intel: bytcr_rt5651: Drop reference count of ACPI device after use
Armin Wolf (1):
drm/amd/display: Fix memory leak in dm_sw_fini()
Arnd Bergmann (2):
RDMA/srpt: fix function pointer cast warnings
nouveau: fix function cast warnings
Baokun Li (3):
ext4: avoid allocating blocks from corrupted group in ext4_mb_try_best_found()
ext4: avoid allocating blocks from corrupted group in ext4_mb_find_by_goal()
ext4: regenerate buddy after block freeing failed if under fc replay
Bart Van Assche (2):
RDMA/srpt: Support specifying the srpt_service_guid parameter fs/aio: Restrict kiocb_set_cancel_fn() to I/O submitted via libaio
Benjamin Gray (1):
powerpc/watchpoints: Annotate atomic context in more places
Borislav Petkov (1):
task_stack, x86/cea: Force-inline stack helpers
Borislav Petkov (AMD) (2):
Revert "x86/ftrace: Use alternative RET encoding" Revert "x86/alternative: Make custom return thunk unconditional"
Chen-Yu Tsai (1):
ASoC: sunxi: sun4i-spdif: Add support for Allwinner H616
Christian König (1):
drm/syncobj: make lockdep complain on WAIT_FOR_SUBMIT v3
Conrad Kostecki (1):
ahci: asm1166: correct count of reported ports
Cyril Hrubis (3):
sched/rt: sysctl_sched_rr_timeslice show default timeslice after reset sched/rt: Fix sysctl_sched_rr_timeslice intial value sched/rt: Disallow writing invalid values to sched_rt_period_us
Damien Le Moal (1):
zonefs: Improve error handling
Dan Carpenter (1):
media: av7110: prevent underflow in write_ts_to_decoder()
Daniel Vacek (1):
IB/hfi1: Fix sdma.h tx->num_descs off-by-one error
Daniel Wagner (4):
nvme-fc: do not wait in vain when unloading module
nvmet-fcloop: swap the list_add_tail arguments
nvmet-fc: release reference on target port
nvmet-fc: abort command when there is no binding
Daniil Dulov (1):
afs: Increase buffer size in afs_update_volume_status()
Devyn Liu (1):
spi: hisi-sfc-v3xx: Return IRQ_NONE if no interrupts were detected
Dmitry Bogdanov (1):
scsi: target: core: Add TMF to tmr_list handling
Eric Dumazet (2):
ipv4: properly combine dev_base_seq and ipv4.dev_addr_genid
ipv6: properly combine dev_base_seq and ipv6.dev_addr_genid
Erik Kurzinger (1):
drm/syncobj: call drm_syncobj_fence_add_wait when WAIT_AVAILABLE flag is set
Felix Fietkau (1):
wifi: mac80211: fix race condition on enabling fast-xmit
Filipe Manana (2):
btrfs: unify lookup return value when dir entry is missing
btrfs: do not pin logs too early during renames
Florian Westphal (1):
netfilter: nf_tables: set dormant flag on hook register failure
Frank Li (2):
usb: cdns3: fixed memory use after free at cdns3_gadget_ep_disable()
usb: cdns3: fix memory double free when handle zero packet
Fullway Wang (2):
fbdev: savage: Error out if pixclock equals zero
fbdev: sis: Error out if pixclock equals zero
Gao Xiang (1):
erofs: fix lz4 inplace decompression
Geert Uytterhoeven (1):
pmdomain: renesas: r8a77980-sysc: CR7 must be always on
Gianmarco Lusvardi (1):
bpf, scripts: Correct GPL license name
Greg Kroah-Hartman (1):
Linux 5.10.211
Guixin Liu (1):
nvmet-tcp: fix nvme tcp ida memory leak
Hannes Reinecke (1):
scsi: lpfc: Use unsigned type for num_sge
Heiko Stuebner (1):
arm64: dts: rockchip: set num-cs property for spi on px30
Jakub Kicinski (2):
tls: rx: jump to a more appropriate label
tls: rx: drop pointless else after goto
Jamal Hadi Salim (3):
net/sched: Retire CBQ qdisc
net/sched: Retire ATM qdisc
net/sched: Retire dsmark qdisc
Jan Beulich (1):
x86: drop bogus "cc" clobber from __try_cmpxchg_user_asm()
Jason Gunthorpe (1):
s390: use the correct count for __iowrite64_copy()
Jiaxun Yang (1):
irqchip/mips-gic: Don't touch vl_map if a local interrupt is not routable
Johannes Berg (2):
iwlwifi: mvm: do more useful queue sync accounting
iwlwifi: mvm: write queue_sync_state only for sync
Josef Bacik (1):
btrfs: tree-checker: check for overlapping extent items
Kalesh AP (1):
RDMA/bnxt_re: Return error for SRQ resize
Kamal Heib (1):
RDMA/qedr: Fix qedr_create_user_qp error flow
Kees Cook (2):
seccomp: Invalidate seccomp mode to catch death failures
net: dev: Convert sa_data to flexible array in struct sockaddr
Krishna Kurapati (1):
usb: gadget: ncm: Avoid dropping datagrams of properly parsed NTBs
Kuniyuki Iwashima (1):
arp: Prevent overflow in arp_req_get().
Kunwu Chan (1):
dmaengine: ti: edma: Add some null pointer checks to the edma_probe
Lennert Buytenhek (1):
ahci: add 43-bit DMA address quirk for ASMedia ASM1061 controllers
Lokesh Gidra (1):
userfaultfd: fix mmap_changing checking in mfill_atomic_hugetlb
Marcos Paulo de Souza (1):
btrfs: introduce btrfs_lookup_match_dir
Martin Blumenstingl (1):
regulator: pwm-regulator: Add validity checks in continuous .get_voltage
Max Verevkin (1):
platform/x86: intel-vbtn: Support for tablet mode on HP Pavilion 13 x360 PC
Michael Schmitz (2):
block: ataflop: fix breakage introduced at blk-mq refactoring
block: ataflop: more blk-mq refactoring fixes
Michal Kazior (1):
wifi: cfg80211: fix missing interfaces when dumping
Mikulas Patocka (1):
dm-crypt: don't modify the data when using authenticated encryption
Nikita Shubin (1):
ARM: ep93xx: Add terminator to gpiod_lookup_table
Oliver Upton (2):
KVM: arm64: vgic-its: Test for valid IRQ in MOVALL handler
KVM: arm64: vgic-its: Test for valid IRQ in its_sync_lpi_pending_table()
Paolo Abeni (1):
mptcp: fix lockless access in subflow ULP diag
Paulo Alcantara (3):
smb: client: fix OOB in receive_encrypted_standard()
smb: client: fix potential OOBs in smb2_parse_contexts()
smb: client: fix parsing of SMB3.1.1 POSIX create context
Peter Oberparleiter (1):
s390/cio: fix invalid -EBUSY on ccw_device_start
Peter Zijlstra (6):
x86/uaccess: Implement macros for CMPXCHG on user addresses x86/text-patching: Make text_gen_insn() play nice with ANNOTATE_NOENDBR x86/ibt,paravirt: Use text_gen_insn() for paravirt_patch() x86/ftrace: Use alternative RET encoding
x86/returnthunk: Allow different return thunks x86/alternative: Make custom return thunk unconditional
Pierre-Louis Bossart (2):
ASoC: Intel: boards: harden codec property handling
ASoC: Intel: boards: get codec device with ACPI instead of bus search
Rafał Miłecki (1):
ARM: dts: BCM53573: Drop nonexistent "default-off" LED trigger
Randy Dunlap (1):
scsi: jazz_esp: Only build if SCSI core is builtin
Ravi Bangoria (1):
powerpc/watchpoint: Workaround P10 DD1 issue with VSX-32 byte instructions
Roger Pau Monne (1):
hvc/xen: prevent concurrent accesses to the shared ring
Sabrina Dubroca (1):
tls: stop recv() if initial process_rx_list gave us non-DATA
Sebastian Andrzej Siewior (1):
hsr: Avoid double remove of a node.
Sergej Bauer (1):
lan743x: fix for potential NULL pointer dereference with bare card
Shengjiu Wang (1):
ASoC: fsl_micfil: register platform component before registering cpu dai
Shyam Prasad N (1):
cifs: add a warning when the in-flight count goes negative
Szilard Fabian (1):
Input: i8042 - add Fujitsu Lifebook U728 to i8042 quirk table
Takashi Sakamoto (1):
firewire: core: send bus reset promptly on gap count error
Tom Parkin (1):
l2tp: pass correct message length to ip6_append_data
Vasiliy Kovalev (2):
gtp: fix use-after-free and null-ptr-deref in gtp_genl_dump_pdp()
ipv6: sr: fix possible use-after-free and null-ptr-deref
Vidya Sagar (1):
PCI/MSI: Prevent MSI hardware interrupt number truncation
Vinod Koul (2):
dmaengine: shdma: increase size of 'dev_id'
dmaengine: fsl-qdma: increase size of 'irq_name'
Wolfram Sang (2):
spi: sh-msiof: avoid integer overflow in constants
packet: move from strlcpy with unused retval to strscpy
Xiaolei Wang (1):
ARM: dts: imx: Set default tuning step for imx6sx usdhc
Xin Long (1):
netfilter: conntrack: check SCTP_CID_SHUTDOWN_ACK for vtag setting in sctp_new
Xu Yang (2):
usb: roles: fix NULL pointer issue when put module's reference
usb: roles: don't get/set_role() when usb_role_switch is unregistered
Yi Sun (1):
virtio-blk: Ensure no requests in virtqueues before deleting vqs.
YouChing Lin (1):
mtd: spinand: macronix: Add support for MX35LFxGE4AD
Zhang Rui (1):
hwmon: (coretemp) Enlarge per package core count limit
Zhang Yi (3):
ext4: correct the hole length returned by ext4_map_blocks()
jbd2: remove redundant buffer io error checks
jbd2: recheck chechpointing non-dirty buffer
Zhihao Cheng (1):
jbd2: Fix wrongly judgement for buffer head removing while doing checkpoint
Zhipeng Lu (1):
IB/hfi1: Fix a memleak in init_credit_return
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 210 +SUBLEVEL = 211 EXTRAVERSION = NAME = Dare mighty things
arch/arm/boot/dts/bcm47189-luxul-xap-1440.dts +0 -1
@@ -26,7 +26,6 @@ leds { wlan { label = "bcm53xx:blue:wlan"; gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>; - linux,default-trigger = "default-off"; }; system {
arch/arm/boot/dts/bcm47189-luxul-xap-810.dts +0 -2
@@ -26,7 +26,6 @@ leds { 5ghz { label = "bcm53xx:blue:5ghz"; gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "default-off"; }; system {
@@ -42,7 +41,6 @@ pcie0_leds { 2ghz { label = "bcm53xx:blue:2ghz"; gpios = <&pcie0_chipcommon 3 GPIO_ACTIVE_HIGH>; - linux,default-trigger = "default-off"; }; };
arch/arm/boot/dts/imx6sx.dtsi +6 -0
@@ -981,6 +981,8 @@ usdhc1: mmc@2190000 { <&clks IMX6SX_CLK_USDHC1>; clock-names = "ipg", "ahb", "per"; bus-width = <4>; + fsl,tuning-start-tap = <20>; + fsl,tuning-step= <2>; status = "disabled"; };
@@ -993,6 +995,8 @@ usdhc2: mmc@2194000 { <&clks IMX6SX_CLK_USDHC2>; clock-names = "ipg", "ahb", "per"; bus-width = <4>; + fsl,tuning-start-tap = <20>; + fsl,tuning-step= <2>; status = "disabled"; };
@@ -1005,6 +1009,8 @@ usdhc3: mmc@2198000 { <&clks IMX6SX_CLK_USDHC3>; clock-names = "ipg", "ahb", "per"; bus-width = <4>; + fsl,tuning-start-tap = <20>; + fsl,tuning-step= <2>; status = "disabled"; };
arch/arm/mach-ep93xx/core.c +1 -0
@@ -337,6 +337,7 @@ static struct gpiod_lookup_table ep93xx_i2c_gpiod_table = { GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN), GPIO_LOOKUP_IDX("G", 0, NULL, 1, GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN), + { } }, };
arch/arm64/boot/dts/rockchip/px30.dtsi +2 -0
@@ -577,6 +577,7 @@ spi0: spi@ff1d0000 { clock-names = "spiclk", "apb_pclk"; dmas = <&dmac 12>, <&dmac 13>; dma-names = "tx", "rx"; + num-cs = <2>; pinctrl-names = "default"; pinctrl-0 = <&spi0_clk &spi0_csn &spi0_miso &spi0_mosi>; #address-cells = <1>;
@@ -592,6 +593,7 @@ spi1: spi@ff1d8000 { clock-names = "spiclk", "apb_pclk"; dmas = <&dmac 14>, <&dmac 15>; dma-names = "tx", "rx"; + num-cs = <2>; pinctrl-names = "default"; pinctrl-0 = <&spi1_clk &spi1_csn0 &spi1_csn1 &spi1_miso &spi1_mosi>; #address-cells = <1>;
arch/arm64/kvm/vgic/vgic-its.c +5 -0
@@ -462,6 +462,9 @@ static int its_sync_lpi_pending_table(struct kvm_vcpu *vcpu) } irq =vgic_get_irq (vcpu->kvm,NULL , intids[i]); +if (!irq) +continue ; +raw_spin_lock_irqsave (&irq->irq_lock, flags); irq->pending_latch = pendmask & (1U << bit_nr);vgic_queue_irq_unlock (vcpu->kvm, irq, flags);
@@ -1374,6 +1377,8 @@ static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,for (i =0 ; i < irq_count; i++) { irq =vgic_get_irq (kvm,NULL , intids[i]); +if (!irq) +continue ;update_affinity (irq, vcpu2);
arch/powerpc/kernel/hw_breakpoint.c +74 -2
106 lines not on this page · raw message
arch/s390/pci/pci.c +1 -1
@@ -225,7 +225,7 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,/* combine single writes by using store-block insn */ void __iowrite64_copy (void __iomem *to,const void *from,size_t count) { -zpci_memcpy_toio (to, from, count); +zpci_memcpy_toio (to, from, count *8 ); }static void __iomem *__ioremap (phys_addr_t addr,size_t size,pgprot_t prot)
arch/x86/include/asm/cpu_entry_area.h +1 -1
@@ -143,7 +143,7 @@ extern void cea_set_pte(void *cea_vaddr, phys_addr_t pa, pgprot_t flags);extern struct cpu_entry_area *get_cpu_entry_area (int cpu); -static inline struct entry_stack *cpu_entry_stack (int cpu) +static __always_inline struct entry_stack *cpu_entry_stack(int cpu) {return &get_cpu_entry_area (cpu)->entry_stack_page.stack; }
arch/x86/include/asm/nospec-branch.h +2 -0
@@ -207,6 +207,8 @@ extern void srso_alias_untrain_ret(void);extern void entry_untrain_ret (void );extern void entry_ibpb (void ); +extern void (*x86_return_thunk)(void ); +#ifdef CONFIG_RETPOLINE typedef u8 retpoline_thunk_t [RETPOLINE_THUNK_SIZE ];
arch/x86/include/asm/text-patching.h +23 -7
@@ -96,24 +96,40 @@ union text_poke_insn { };static __always_inline -void *text_gen_insn(u8 opcode, const void *addr, const void *dest) +void __text_gen_insn(void *buf, u8 opcode, const void *addr, const void *dest, int size) { -static union text_poke_insn insn;/* per instance */ -int size =text_opcode_size (opcode); +union text_poke_insn *insn = buf; + +BUG_ON (size <text_opcode_size (opcode)); + +/* +* Hide the addresses to avoid the compiler folding in constants when +* referencing code, these can mess up annotations like +* ANNOTATE_NOENDBR. +*/ +OPTIMIZER_HIDE_VAR (insn); +OPTIMIZER_HIDE_VAR (addr); +OPTIMIZER_HIDE_VAR (dest); - insn.opcode = opcode; + insn->opcode = opcode;if (size >1 ) { - insn.disp = (long )dest - (long )(addr + size); + insn->disp = (long )dest - (long )(addr + size);if (size ==2 ) {/* -* Ensure that for JMP9 the displacement +* Ensure that for JMP8 the displacement * actually fits the signed byte. */ -BUG_ON ((insn.disp >>31 ) != (insn.disp >>7 )); +BUG_ON ((insn->disp >>31 ) != (insn->disp >>7 )); } } +} +static __always_inline +void *text_gen_insn(u8 opcode, const void *addr, const void *dest) +{ +static union text_poke_insn insn;/* per instance */ +__text_gen_insn (&insn, opcode, addr, dest,text_opcode_size (opcode));return &insn.text; }
arch/x86/include/asm/uaccess.h +142 -0
154 lines not on this page · raw message
arch/x86/kernel/alternative.c +9 -4
@@ -676,6 +676,7 @@ void __init_or_module noinline apply_retpolines(s32 *start, s32 *end) }#ifdef CONFIG_RETHUNK +/* * Rewrite the compiler generated return thunk tail-calls. *
@@ -691,14 +692,18 @@ static int patch_return(void *addr, struct insn *insn, u8 *bytes) {int i =0 ; -if (cpu_feature_enabled (X86_FEATURE_RETHUNK )) -return -1 ; +if (cpu_feature_enabled (X86_FEATURE_RETHUNK )) { +if (x86_return_thunk == __x86_return_thunk) +return -1 ; - bytes[i++] =RET_INSN_OPCODE ; + i =JMP32_INSN_SIZE ; +__text_gen_insn (bytes,JMP32_INSN_OPCODE , addr, x86_return_thunk, i); + }else { + bytes[i++] =RET_INSN_OPCODE ; + }for (; i < insn->length;) bytes[i++] =INT3_INSN_OPCODE ; -return i; }
arch/x86/kernel/ftrace.c +1 -3
@@ -367,10 +367,8 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size) goto fail; ip = trampoline + size; - -/* The trampoline ends with ret(q) */ if (cpu_feature_enabled (X86_FEATURE_RETHUNK )) -memcpy (ip,text_gen_insn (JMP32_INSN_OPCODE , ip, &__x86_return_thunk),JMP32_INSN_SIZE ); +__text_gen_insn (ip,JMP32_INSN_OPCODE , ip, x86_return_thunk,JMP32_INSN_SIZE );else memcpy (ip, retq,sizeof (retq));
arch/x86/kernel/paravirt.c +5 -17
@@ -55,28 +55,16 @@ void __init default_banner(void)static const unsigned char ud2a[] = {0x0f ,0x0b };struct branch { -unsigned char opcode; -u32 delta; +unsigned char opcode; +u32 delta; } __attribute__((packed));static unsigned paravirt_patch_call (void *insn_buff,const void *target,unsigned long addr,unsigned len) { -const int call_len =5 ; -struct branch *b = insn_buff; -unsigned long delta = (unsigned long )target - (addr+call_len); - -if (len < call_len) { -pr_warn ("paravirt: Failed to patch indirect CALL at %ps\n" , (void *)addr); -/* Kernel might not be viable if patching fails, bail out: */ -BUG_ON (1 ); - } - - b->opcode =0xe8 ;/* call */ - b->delta = delta; -BUILD_BUG_ON (sizeof (*b) != call_len); - -return call_len; +__text_gen_insn (insn_buff,CALL_INSN_OPCODE , + (void *)addr, target,CALL_INSN_SIZE ); +return CALL_INSN_SIZE ; }#ifdef CONFIG_PARAVIRT_XXL
arch/x86/kernel/static_call.c +1 -1
@@ -41,7 +41,7 @@ static void __ref __static_call_transform(void *insn, enum insn_type type,case RET :if (cpu_feature_enabled (X86_FEATURE_RETHUNK )) - code =text_gen_insn (JMP32_INSN_OPCODE , insn, &__x86_return_thunk); + code =text_gen_insn (JMP32_INSN_OPCODE , insn, x86_return_thunk);else code = &retinsn;break ;
arch/x86/net/bpf_jit_comp.c +1 -1
@@ -405,7 +405,7 @@ static void emit_return(u8 **pprog, u8 *ip)int cnt =0 ;if (cpu_feature_enabled (X86_FEATURE_RETHUNK )) { -emit_jump (&prog, &__x86_return_thunk, ip); +emit_jump (&prog, x86_return_thunk, ip); }else {EMIT1 (0xC3 );/* ret */ if (IS_ENABLED (CONFIG_SLS ))
drivers/ata/ahci.c +28 -6
@@ -49,6 +49,7 @@ enum {enum board_ids {/* board IDs by feature in alphabetical order */ board_ahci, + board_ahci_43bit_dma, board_ahci_ign_iferr, board_ahci_low_power, board_ahci_no_debounce_delay,
@@ -129,6 +130,13 @@ static const struct ata_port_info ahci_port_info[] = { .udma_mask = ATA_UDMA6, .port_ops = &ahci_ops, }, + [board_ahci_43bit_dma] = { + AHCI_HFLAGS (AHCI_HFLAG_43BIT_ONLY), + .flags = AHCI_FLAG_COMMON, + .pio_mask = ATA_PIO4, + .udma_mask = ATA_UDMA6, + .port_ops = &ahci_ops, + }, [board_ahci_ign_iferr] = { AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR), .flags = AHCI_FLAG_COMMON,
@@ -594,11 +602,11 @@ static const struct pci_device_id ahci_pci_tbl[] = { { PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */ { PCI_VDEVICE(PROMISE, 0x3781), board_ahci }, /* FastTrak TX8660 ahci-mode */ -/* Asmedia */ +/* ASMedia */ { PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci }, /* ASM1060 */ { PCI_VDEVICE(ASMEDIA, 0x0602), board_ahci }, /* ASM1060 */ - { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci }, /* ASM1061 */ - { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci }, /* ASM1062 */ + { PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci_43bit_dma }, /* ASM1061 */ + { PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci_43bit_dma }, /* ASM1061/1062 */ { PCI_VDEVICE(ASMEDIA, 0x0621), board_ahci }, /* ASM1061R */ { PCI_VDEVICE(ASMEDIA, 0x0622), board_ahci }, /* ASM1062R */
@@ -654,6 +662,11 @@ MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");static void ahci_pci_save_initial_config (struct pci_dev *pdev,struct ahci_host_priv *hpriv) { +if (pdev->vendor ==PCI_VENDOR_ID_ASMEDIA && pdev->device ==0x1166 ) { +dev_info (&pdev->dev,"ASM1166 has only six ports\n" ); + hpriv->saved_port_map =0x3f ; + } +if (pdev->vendor ==PCI_VENDOR_ID_JMICRON && pdev->device ==0x2361 ) {dev_info (&pdev->dev,"JMB361 has only one port\n" ); hpriv->force_port_map =1 ;
@@ -946,11 +959,20 @@ static int ahci_pci_device_resume(struct device *dev)#endif /* CONFIG_PM */ -static int ahci_configure_dma_masks (struct pci_dev *pdev,int using_dac) +static int ahci_configure_dma_masks (struct pci_dev *pdev, +struct ahci_host_priv *hpriv) { -const int dma_bits = using_dac ?64 :32 ; +int dma_bits;int rc; +if (hpriv->cap &HOST_CAP_64 ) { + dma_bits =64 ; +if (hpriv->flags &AHCI_HFLAG_43BIT_ONLY ) + dma_bits =43 ; + }else { + dma_bits =32 ; + } +/* * If the device fixup already set the dma_mask to some non-standard * value, don't extend it here. This happens on STA2X11, for example.
@@ -1928,7 +1950,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)ahci_gtf_filter_workaround (host);/* initialize adapter */ - rc =ahci_configure_dma_masks (pdev, hpriv->cap &HOST_CAP_64 ); + rc =ahci_configure_dma_masks (pdev, hpriv);if (rc)return rc;
drivers/ata/ahci.h +1 -0
@@ -244,6 +244,7 @@ enum {AHCI_HFLAG_IGN_NOTSUPP_POWER_ON =BIT (27 ),/* ignore -EOPNOTSUPP from phy_power_on() */ AHCI_HFLAG_NO_SXS =BIT (28 ),/* SXS not supported */ + AHCI_HFLAG_43BIT_ONLY = BIT(29), /* 43bit DMA addr limit *//* ap->flags bits */
drivers/block/ataflop.c +38 -18
180 lines not on this page · raw message
drivers/block/virtio_blk.c +4 -3
@@ -952,14 +952,15 @@ static int virtblk_freeze(struct virtio_device *vdev) {struct virtio_blk *vblk = vdev->priv; +/* Ensure no requests in virtqueues before deleting vqs. */ +blk_mq_freeze_queue (vblk->disk->queue); +/* Ensure we don't receive any more interrupts */ vdev->config->reset (vdev);/* Make sure no work handler is accessing the device. */ flush_work (&vblk->config_work); -blk_mq_quiesce_queue (vblk->disk->queue); - vdev->config->del_vqs (vdev);kfree (vblk->vqs);
@@ -977,7 +978,7 @@ static int virtblk_restore(struct virtio_device *vdev)virtio_device_ready (vdev); -blk_mq_unquiesce_queue (vblk->disk->queue); +blk_mq_unfreeze_queue (vblk->disk->queue); return 0; }#endif
drivers/dma/fsl-qdma.c +1 -1
@@ -805,7 +805,7 @@ fsl_qdma_irq_init(struct platform_device *pdev,int i;int cpu;int ret; -char irq_name[20 ]; +char irq_name[32 ]; fsl_qdma->error_irq =platform_get_irq_byname (pdev,"qdma-error" );
drivers/dma/sh/shdma.h +1 -1
@@ -25,7 +25,7 @@ struct sh_dmae_chan {const struct sh_dmae_slave_config *config;/* Slave DMA configuration */ int xmit_shift;/* log_2(bytes_per_xfer) */ void __iomem *base; -char dev_id[16 ];/* unique name per DMAC of channel */ +char dev_id[32 ];/* unique name per DMAC of channel */ int pm_error;dma_addr_t slave_addr; };
drivers/dma/ti/edma.c +10 -0
@@ -2462,6 +2462,11 @@ static int edma_probe(struct platform_device *pdev)if (irq >0 ) { irq_name =devm_kasprintf (dev,GFP_KERNEL ,"%s_ccint" ,dev_name (dev)); +if (!irq_name) { + ret = -ENOMEM ; + goto err_disable_pm; + } + ret =devm_request_irq (dev, irq, dma_irq_handler,0 , irq_name, ecc);if (ret) {
@@ -2478,6 +2483,11 @@ static int edma_probe(struct platform_device *pdev)if (irq >0 ) { irq_name =devm_kasprintf (dev,GFP_KERNEL ,"%s_ccerrint" ,dev_name (dev)); +if (!irq_name) { + ret = -ENOMEM ; + goto err_disable_pm; + } + ret =devm_request_irq (dev, irq, dma_ccerr_handler,0 , irq_name, ecc);if (ret) {
drivers/firewire/core-card.c +17 -1
@@ -429,7 +429,23 @@ static void bm_work(struct work_struct *work)*/ card->bm_generation = generation; -if (root_device ==NULL ) { +if (card->gap_count ==0 ) { +/* +* If self IDs have inconsistent gap counts, do a +* bus reset ASAP. The config rom read might never +* complete, so don't wait for it. However, still +* send a PHY configuration packet prior to the +* bus reset. The PHY configuration packet might +* fail, but 1394-2008 8.4.5.2 explicitly permits +* it in this case, so it should be safe to try. +*/ + new_root_id = local_id; +/* +* We must always send a bus reset if the gap count +* is inconsistent, so bypass the 5-reset limit. +*/ + card->bm_retries =0 ; + }else if (root_device ==NULL ) {/* * Either link_on is false, or we failed to read the * config rom. In either case, pick another root.
drivers/firmware/efi/arm-runtime.c +1 -1
@@ -107,7 +107,7 @@ static int __init arm_enable_runtime_services(void)efi_memory_desc_t *md;for_each_efi_memory_desc (md) { -int md_size = md->num_pages <<EFI_PAGE_SHIFT ; +u64 md_size = md->num_pages <<EFI_PAGE_SHIFT ;struct resource *res;if (!(md->attribute &EFI_MEMORY_SP ))
drivers/firmware/efi/efi-init.c +10 -9
@@ -141,15 +141,6 @@ static __init int is_usable_memory(efi_memory_desc_t *md)case EFI_BOOT_SERVICES_DATA :case EFI_CONVENTIONAL_MEMORY :case EFI_PERSISTENT_MEMORY : -/* -* Special purpose memory is 'soft reserved', which means it -* is set aside initially, but can be hotplugged back in or -* be assigned to the dax driver after boot. -*/ -if (efi_soft_reserve_enabled () && - (md->attribute &EFI_MEMORY_SP )) -return false; -/* * According to the spec, these regions are no longer reserved * after calling ExitBootServices(). However, we can only use
@@ -194,6 +185,16 @@ static __init void reserve_regions(void) size = npages <<PAGE_SHIFT ;if (is_memory (md)) { +/* +* Special purpose memory is 'soft reserved', which +* means it is set aside initially. Don't add a memblock +* for it now so that it can be hotplugged back in or +* be assigned to the dax driver after boot. +*/ +if (efi_soft_reserve_enabled () && + (md->attribute &EFI_MEMORY_SP )) +continue ; +early_init_dt_add_memory_arch (paddr, size);if (!is_usable_memory (md))
drivers/firmware/efi/riscv-runtime.c +1 -1
@@ -85,7 +85,7 @@ static int __init riscv_enable_runtime_services(void)efi_memory_desc_t *md;for_each_efi_memory_desc (md) { -int md_size = md->num_pages <<EFI_PAGE_SHIFT ; +u64 md_size = md->num_pages <<EFI_PAGE_SHIFT ;struct resource *res;if (!(md->attribute &EFI_MEMORY_SP ))
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +1 -0
@@ -1456,6 +1456,7 @@ static int dm_sw_fini(void *handle)if (adev->dm.dmub_srv) {dmub_srv_destroy (adev->dm.dmub_srv); +kfree (adev->dm.dmub_srv); adev->dm.dmub_srv =NULL ; }
drivers/gpu/drm/drm_syncobj.c +15 -1
@@ -387,6 +387,15 @@ int drm_syncobj_find_fence(struct drm_file *file_private,if (!syncobj)return -ENOENT ; +/* Waiting for userspace with locks help is illegal cause that can +* trivial deadlock with page faults for example. Make lockdep complain +* about it early on. +*/ +if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) { +might_sleep (); +lockdep_assert_none_held_once (); + } + *fence =drm_syncobj_fence_get (syncobj);if (*fence) {
@@ -951,6 +960,10 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,uint64_t *points;uint32_t signaled_count, i; +if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | +DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE )) +lockdep_assert_none_held_once (); + points =kmalloc_array (count,sizeof (*points),GFP_KERNEL );if (points ==NULL )return -ENOMEM ;
@@ -1017,7 +1030,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs,* fallthough and try a 0 timeout wait! */ -if (flags &DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT ) { +if (flags & (DRM_SYNCOBJ_WAIT_FLAGS_WAIT_FOR_SUBMIT | +DRM_SYNCOBJ_WAIT_FLAGS_WAIT_AVAILABLE )) {for (i =0 ; i < count; ++i)drm_syncobj_fence_add_wait (syncobjs[i], &entries[i]); }
drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c +7 -1
@@ -154,11 +154,17 @@ shadow_fw_init(struct nvkm_bios *bios, const char *name)return (void *)fw; } +static void +shadow_fw_release (void *fw) +{ +release_firmware (fw); +} +static const struct nvbios_source shadow_fw = { .name ="firmware" , .init = shadow_fw_init, - .fini = (void (*)(void *))release_firmware, + .fini = shadow_fw_release, .read = shadow_fw_read, .rw = false, };
drivers/hwmon/coretemp.c +1 -1
@@ -40,7 +40,7 @@ MODULE_PARM_DESC(tjmax, "TjMax value in degrees Celsius");#define PKG_SYSFS_ATTR_NO 1/* Sysfs attribute for package temp */ #define BASE_SYSFS_ATTR_NO 2/* Sysfs Base attr no for coretemp */ -#define NUM_REAL_CORES 128/* Number of Real cores per cpu */ +#define NUM_REAL_CORES 512/* Number of Real cores per cpu */ #define CORETEMP_NAME_LENGTH 28/* String Length of attrs */ #define MAX_CORE_ATTRS 4/* Maximum no of basic attrs */ #define TOTAL_ATTRS (MAX_CORE_ATTRS + 1)
drivers/infiniband/hw/bnxt_re/ib_verbs.c +2 -3
@@ -1711,7 +1711,7 @@ int bnxt_re_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *srq_attr,switch (srq_attr_mask) {case IB_SRQ_MAX_WR :/* SRQ resize is not supported */ -break ; +return -EINVAL ;case IB_SRQ_LIMIT :/* Change the SRQ threshold */ if (srq_attr->srq_limit > srq->qplib_srq.max_wqe)
@@ -1726,13 +1726,12 @@ int bnxt_re_modify_srq(struct ib_srq *ib_srq, struct ib_srq_attr *srq_attr,/* On success, update the shadow */ srq->srq_limit = srq_attr->srq_limit;/* No need to Build and send response back to udata */ -break ; +return 0 ;default :ibdev_err (&rdev->ibdev,"Unsupported srq_attr_mask 0x%x" , srq_attr_mask);return -EINVAL ; } -return 0 ; }int bnxt_re_query_srq (struct ib_srq *ib_srq,struct ib_srq_attr *srq_attr)
drivers/infiniband/hw/hfi1/pio.c +5 -1
@@ -2131,7 +2131,7 @@ int init_credit_return(struct hfi1_devdata *dd)"Unable to allocate credit return DMA range for NUMA %d\n" , i); ret = -ENOMEM ; - goto done; + goto free_cr_base; } }set_dev_node (&dd->pcidev->dev, dd->node);
@@ -2139,6 +2139,10 @@ int init_credit_return(struct hfi1_devdata *dd) ret =0 ; done:return ret; + +free_cr_base: +free_credit_return (dd); + goto done; }void free_credit_return (struct hfi1_devdata *dd)
drivers/infiniband/hw/hfi1/sdma.c +1 -1
@@ -3200,7 +3200,7 @@ int _pad_sdma_tx_descs(struct hfi1_devdata *dd, struct sdma_txreq *tx) {int rval =0 ; -if ((unlikely (tx->num_desc +1 == tx->desc_limit))) { +if ((unlikely (tx->num_desc == tx->desc_limit))) { rval =_extend_sdma_tx_descs (dd, tx);if (rval) {__sdma_txclean (dd, tx);
drivers/infiniband/hw/qedr/verbs.c +10 -1
@@ -1865,8 +1865,17 @@ static int qedr_create_user_qp(struct qedr_dev *dev,/* RQ - read access only (0) */ rc =qedr_init_user_queue (udata, dev, &qp->urq, ureq.rq_addr, ureq.rq_len, true,0 , alloc_and_init); -if (rc) +if (rc) { +ib_umem_release (qp->usq.umem); + qp->usq.umem =NULL ; +if (rdma_protocol_roce (&dev->ibdev,1 )) { +qedr_free_pbl (dev, &qp->usq.pbl_info, + qp->usq.pbl_tbl); + }else { +kfree (qp->usq.pbl_tbl); + }return rc; + } }memset (&in_params,0 ,sizeof (in_params));
drivers/infiniband/ulp/srpt/ib_srpt.c +11 -6
@@ -79,12 +79,16 @@ module_param(srpt_srq_size, int, 0444);MODULE_PARM_DESC (srpt_srq_size,"Shared receive queue (SRQ) size." ); +static int srpt_set_u64_x (const char *buffer,const struct kernel_param *kp) +{ +return kstrtou64 (buffer,16 , (u64 *)kp->arg); +}static int srpt_get_u64_x (char *buffer,const struct kernel_param *kp) {return sprintf (buffer,"0x%016llx\n" , *(u64 *)kp->arg); } -module_param_call (srpt_service_guid,NULL , srpt_get_u64_x, &srpt_service_guid, -0444 ); +module_param_call (srpt_service_guid, srpt_set_u64_x, srpt_get_u64_x, + &srpt_service_guid,0444 );MODULE_PARM_DESC (srpt_service_guid,"Using this value for ioc_guid, id_ext, and cm_listen_id instead of using the node_guid of the first HCA." );
@@ -210,10 +214,12 @@ static const char *get_ch_state_name(enum rdma_ch_state s)/** * srpt_qp_event - QP event callback function * @event: Description of the event that occurred. -* @ch: SRPT RDMA channel. +* @ptr: SRPT RDMA channel. */ -static void srpt_qp_event (struct ib_event *event,struct srpt_rdma_ch *ch) +static void srpt_qp_event (struct ib_event *event,void *ptr) { +struct srpt_rdma_ch *ch = ptr; +pr_debug ("QP event %d on ch=%p sess_name=%s-%d state=%s\n" , event->event, ch, ch->sess_name, ch->qp->qp_num,get_ch_state_name (ch->state));
@@ -1803,8 +1809,7 @@ static int srpt_create_ch_ib(struct srpt_rdma_ch *ch) ch->cq_size = ch->rq_size + sq_size; qp_init->qp_context = (void *)ch; - qp_init->event_handler - = (void (*)(struct ib_event *,void *))srpt_qp_event; + qp_init->event_handler = srpt_qp_event; qp_init->send_cq = ch->cq; qp_init->recv_cq = ch->cq; qp_init->sq_sig_type =IB_SIGNAL_REQ_WR ;
drivers/input/serio/i8042-acpipnpio.h +8 -0
@@ -625,6 +625,14 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = { }, .driver_data = (void *)(SERIO_QUIRK_NOAUX) }, + { +/* Fujitsu Lifebook U728 */ + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"FUJITSU" ), + DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U728"), + }, + .driver_data = (void *)(SERIO_QUIRK_NOAUX ) + }, {/* Gigabyte M912 */ .matches = {
drivers/irqchip/irq-mips-gic.c +2 -0
@@ -398,6 +398,8 @@ static void gic_all_vpes_irq_cpu_online(void)unsigned int intr = local_intrs[i];struct gic_all_vpes_chip_data *cd; +if (!gic_local_irq_is_routable (intr)) +continue ; cd = &gic_all_vpes_chip_data[intr];write_gic_vl_map (mips_gic_vx_map_reg (intr), cd->map);if (cd->mask)
drivers/md/dm-crypt.c +6 -0
@@ -2064,6 +2064,12 @@ static void kcryptd_crypt_write_convert(struct dm_crypt_io *io) io->ctx.bio_out = clone; io->ctx.iter_out = clone->bi_iter; +if (crypt_integrity_aead (cc)) { +bio_copy_data (clone, io->base_bio); + io->ctx.bio_in = clone; + io->ctx.iter_in = clone->bi_iter; + } + sector +=bio_sectors (clone);crypt_inc_pending (io);
drivers/media/pci/ttpci/av7110_av.c +2 -2
@@ -822,10 +822,10 @@ static int write_ts_to_decoder(struct av7110 *av7110, int type, const u8 *buf, sav7110_ipack_flush (ipack);if (buf[3 ] &ADAPT_FIELD ) { +if (buf[4 ] > len -1 -4 ) +return 0 ; len -= buf[4 ] +1 ; buf += buf[4 ] +1 ; -if (!len) -return 0 ; }av7110_ipack_instant_repack (buf +4 , len -4 , ipack);
drivers/mtd/nand/spi/macronix.c +20 -0
@@ -119,6 +119,26 @@ static const struct spinand_info macronix_spinand_table[] = { &update_cache_variants), SPINAND_HAS_QE_BIT, SPINAND_ECCINFO(&mx35lfxge4ab_ooblayout, NULL)), +SPINAND_INFO ("MX35LF2GE4AD" , +SPINAND_ID (SPINAND_READID_METHOD_OPCODE_DUMMY ,0x26 ), +NAND_MEMORG (1 ,2048 ,64 ,64 ,2048 ,40 ,1 ,1 ,1 ), +NAND_ECCREQ (8 ,512 ), +SPINAND_INFO_OP_VARIANTS (&read_cache_variants, + &write_cache_variants, + &update_cache_variants), +0 , +SPINAND_ECCINFO (&mx35lfxge4ab_ooblayout, + mx35lf1ge4ab_ecc_get_status)), +SPINAND_INFO ("MX35LF4GE4AD" , +SPINAND_ID (SPINAND_READID_METHOD_OPCODE_DUMMY ,0x37 ), +NAND_MEMORG (1 ,4096 ,128 ,64 ,2048 ,40 ,1 ,1 ,1 ), +NAND_ECCREQ (8 ,512 ), +SPINAND_INFO_OP_VARIANTS (&read_cache_variants, + &write_cache_variants, + &update_cache_variants), +0 , +SPINAND_ECCINFO (&mx35lfxge4ab_ooblayout, + mx35lf1ge4ab_ecc_get_status)), SPINAND_INFO("MX31LF1GE4BC", SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x1e), NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1),
drivers/net/ethernet/microchip/lan743x_ethtool.c +5 -4
@@ -780,7 +780,9 @@ static void lan743x_ethtool_get_wol(struct net_device *netdev, wol->supported =0 ; wol->wolopts =0 ; -phy_ethtool_get_wol (netdev->phydev, wol); + +if (netdev->phydev) +phy_ethtool_get_wol (netdev->phydev, wol); wol->supported |=WAKE_BCAST |WAKE_UCAST |WAKE_MCAST |WAKE_MAGIC |WAKE_PHY |WAKE_ARP ;
@@ -809,9 +811,8 @@ static int lan743x_ethtool_set_wol(struct net_device *netdev,device_set_wakeup_enable (&adapter->pdev->dev, (bool )wol->wolopts); -phy_ethtool_set_wol (netdev->phydev, wol); - - return 0; +return netdev->phydev ?phy_ethtool_set_wol (netdev->phydev, wol) + : -ENETDOWN; }#endif /* CONFIG_PM */
drivers/net/gtp.c +5 -5
@@ -1410,20 +1410,20 @@ static int __init gtp_init(void)if (err <0 ) goto error_out; - err =genl_register_family (>p_genl_family); + err =register_pernet_subsys (>p_net_ops);if (err <0 ) goto unreg_rtnl_link; - err =register_pernet_subsys (>p_net_ops); + err =genl_register_family (>p_genl_family);if (err <0 ) - goto unreg_genl_family; + goto unreg_pernet_subsys;pr_info ("GTP module loaded (pdp ctx size %zd bytes)\n" ,sizeof (struct pdp_ctx ));return 0 ; -unreg_genl_family: -genl_unregister_family (>p_genl_family); +unreg_pernet_subsys: +unregister_pernet_subsys (>p_net_ops); unreg_rtnl_link:rtnl_link_unregister (>p_link_ops); error_out:
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +8 -6
@@ -5155,8 +5155,7 @@ void iwl_mvm_sync_rx_queues_internal(struct iwl_mvm *mvm,if (notif->sync) { notif->cookie = mvm->queue_sync_cookie; -atomic_set (&mvm->queue_sync_counter, - mvm->trans->num_rx_queues); + mvm->queue_sync_state = (1 << mvm->trans->num_rx_queues) -1 ; } ret = iwl_mvm_notify_rx_queue(mvm, qmask, (u8 *)notif,
@@ -5169,16 +5168,19 @@ void iwl_mvm_sync_rx_queues_internal(struct iwl_mvm *mvm,if (notif->sync) {lockdep_assert_held (&mvm->mutex); ret =wait_event_timeout (mvm->rx_sync_waitq, -atomic_read (&mvm->queue_sync_counter) ==0 || +READ_ONCE (mvm->queue_sync_state) ==0 ||iwl_mvm_is_radio_killed (mvm),HZ ); -WARN_ON_ONCE (!ret && !iwl_mvm_is_radio_killed (mvm)); +WARN_ONCE (!ret && !iwl_mvm_is_radio_killed (mvm), +"queue sync: failed to sync, state is 0x%lx\n" , + mvm->queue_sync_state); } out: -atomic_set (&mvm->queue_sync_counter,0 ); -if (notif->sync) +if (notif->sync) { + mvm->queue_sync_state =0 ; mvm->queue_sync_cookie++; + } }static void iwl_mvm_sync_rx_queues (struct ieee80211_hw *hw)
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h +1 -1
@@ -842,7 +842,7 @@ struct iwl_mvm {unsigned long status;u32 queue_sync_cookie; -atomic_t queue_sync_counter; +unsigned long queue_sync_state;/* * for beacon filtering - * currently only one interface can be supported
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +1 -1
@@ -725,7 +725,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,init_waitqueue_head (&mvm->rx_sync_waitq); -atomic_set (&mvm->queue_sync_counter,0 ); + mvm->queue_sync_state =0 ;SET_IEEE80211_DEV (mvm->hw, mvm->trans->dev);
drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +7 -3
@@ -853,9 +853,13 @@ void iwl_mvm_rx_queue_notif(struct iwl_mvm *mvm, struct napi_struct *napi,WARN_ONCE (1 ,"Invalid identifier %d" , internal_notif->type); } -if (internal_notif->sync && - !atomic_dec_return (&mvm->queue_sync_counter)) -wake_up (&mvm->rx_sync_waitq); +if (internal_notif->sync) { +WARN_ONCE (!test_and_clear_bit (queue, &mvm->queue_sync_state), +"queue sync: queue %d responded a second time!\n" , + queue); +if (READ_ONCE (mvm->queue_sync_state) ==0 ) +wake_up (&mvm->rx_sync_waitq); + } } static void iwl_mvm_oldsn_workaround(struct iwl_mvm *mvm,
drivers/nvme/host/fc.c +6 -41
95 lines not on this page · raw message
drivers/nvme/target/fc.c +8 -3
@@ -357,7 +357,7 @@ __nvmet_fc_finish_ls_req(struct nvmet_fc_ls_req_op *lsop)if (!lsop->req_queued) {spin_unlock_irqrestore (&tgtport->lock, flags); -return ; + goto out_puttgtport; }list_del (&lsop->lsreq_list);
@@ -370,6 +370,7 @@ __nvmet_fc_finish_ls_req(struct nvmet_fc_ls_req_op *lsop) (lsreq->rqstlen + lsreq->rsplen), DMA_BIDIRECTIONAL); +out_puttgtport:nvmet_fc_tgtport_put (tgtport); }
@@ -1101,6 +1102,9 @@ nvmet_fc_alloc_target_assoc(struct nvmet_fc_tgtport *tgtport, void *hosthandle)int idx;bool needrandom = true; +if (!tgtport->pe) +return NULL ; + assoc =kzalloc (sizeof (*assoc),GFP_KERNEL );if (!assoc)return NULL ;
@@ -2528,8 +2532,9 @@ nvmet_fc_handle_fcp_rqst(struct nvmet_fc_tgtport *tgtport, fod->req.cmd = &fod->cmdiubuf.sqe; fod->req.cqe = &fod->rspiubuf.cqe; -if (tgtport->pe) - fod->req.port = tgtport->pe->port; +if (!tgtport->pe) + goto transport_error; + fod->req.port = tgtport->pe->port;/* clear any response payload */ memset (&fod->rspiubuf,0 ,sizeof (fod->rspiubuf));
drivers/nvme/target/fcloop.c +3 -3
@@ -358,7 +358,7 @@ fcloop_h2t_ls_req(struct nvme_fc_local_port *localport,if (!rport->targetport) { tls_req->status = -ECONNREFUSED ;spin_lock (&rport->lock); -list_add_tail (&rport->ls_list, &tls_req->ls_list); +list_add_tail (&tls_req->ls_list, &rport->ls_list);spin_unlock (&rport->lock);schedule_work (&rport->ls_work);return ret;
@@ -391,7 +391,7 @@ fcloop_h2t_xmt_ls_rsp(struct nvmet_fc_target_port *targetport,if (remoteport) { rport = remoteport->private;spin_lock (&rport->lock); -list_add_tail (&rport->ls_list, &tls_req->ls_list); +list_add_tail (&tls_req->ls_list, &rport->ls_list);spin_unlock (&rport->lock);schedule_work (&rport->ls_work); }
@@ -446,7 +446,7 @@ fcloop_t2h_ls_req(struct nvmet_fc_target_port *targetport, void *hosthandle,if (!tport->remoteport) { tls_req->status = -ECONNREFUSED ;spin_lock (&tport->lock); -list_add_tail (&tport->ls_list, &tls_req->ls_list); +list_add_tail (&tls_req->ls_list, &tport->ls_list);spin_unlock (&tport->lock);schedule_work (&tport->ls_work);return ret;
drivers/nvme/target/tcp.c +1 -0
@@ -1852,6 +1852,7 @@ static void __exit nvmet_tcp_exit(void)flush_scheduled_work ();destroy_workqueue (nvmet_tcp_wq); +ida_destroy (&nvmet_tcp_queue_ida); }module_init (nvmet_tcp_init);
drivers/pci/msi.c +1 -1
@@ -1409,7 +1409,7 @@ static irq_hw_number_t pci_msi_domain_calc_hwirq(struct msi_desc *desc)return (irq_hw_number_t )desc->msi_attrib.entry_nr |pci_dev_id (dev) <<11 | - (pci_domain_nr (dev->bus) &0xFFFFFFFF ) <<27 ; + ((irq_hw_number_t)(pci_domain_nr (dev->bus) &0xFFFFFFFF )) <<27 ; }static inline bool pci_msi_desc_is_multi_msi (struct msi_desc *desc)
drivers/platform/x86/intel-vbtn.c +6 -0
@@ -230,6 +230,12 @@ static const struct dmi_system_id dmi_switches_allow_list[] = { DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7352"), }, }, + { + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), + DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion 13 x360 PC"), + }, + }, {}/* Array terminator */ };
drivers/regulator/pwm-regulator.c +3 -0
@@ -158,6 +158,9 @@ static int pwm_regulator_get_voltage(struct regulator_dev *rdev)pwm_get_state (drvdata->pwm, &pstate); voltage =pwm_get_relative_duty_cycle (&pstate, duty_unit); +if (voltage <min (max_uV_duty, min_uV_duty) || + voltage >max (max_uV_duty, min_uV_duty)) +return -ENOTRECOVERABLE ;/* * The dutycycle for min_uV might be greater than the one for max_uV.
drivers/s390/cio/device_ops.c +3 -3
@@ -202,7 +202,8 @@ int ccw_device_start_timeout_key(struct ccw_device *cdev, struct ccw1 *cpa,return -EINVAL ;if (cdev->private->state ==DEV_STATE_NOT_OPER )return -ENODEV ; -if (cdev->private->state ==DEV_STATE_VERIFY ) { +if (cdev->private->state ==DEV_STATE_VERIFY || + cdev->private->flags.doverify) {/* Remember to fake irb when finished. */ if (!cdev->private->flags.fake_irb) { cdev->private->flags.fake_irb =FAKE_CMD_IRB ;
@@ -214,8 +215,7 @@ int ccw_device_start_timeout_key(struct ccw_device *cdev, struct ccw1 *cpa, }if (cdev->private->state !=DEV_STATE_ONLINE || ((sch->schib.scsw.cmd.stctl &SCSW_STCTL_PRIM_STATUS ) && - !(sch->schib.scsw.cmd.stctl &SCSW_STCTL_SEC_STATUS )) || - cdev->private->flags.doverify) + !(sch->schib.scsw.cmd.stctl &SCSW_STCTL_SEC_STATUS )))return -EBUSY ; ret =cio_set_options (sch, flags);if (ret)
drivers/scsi/Kconfig +1 -1
@@ -1289,7 +1289,7 @@ source "drivers/scsi/arm/Kconfig" config JAZZ_ESP bool "MIPS JAZZ FAS216 SCSI support" - depends on MACH_JAZZ && SCSI + depends on MACH_JAZZ && SCSI=y select SCSI_SPI_ATTRS help This is the driver for the onboard SCSI host adapter of MIPS Magnum
drivers/scsi/lpfc/lpfc_scsi.c +6 -6
@@ -1944,7 +1944,7 @@ lpfc_bg_setup_bpl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,* * Returns the number of SGEs added to the SGL. **/ -static int +static uint32_t lpfc_bg_setup_sgl (struct lpfc_hba *phba,struct scsi_cmnd *sc,struct sli4_sge *sgl,int datasegcnt,struct lpfc_io_buf *lpfc_cmd)
@@ -1952,8 +1952,8 @@ lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc,struct scatterlist *sgde =NULL ;/* s/g data entry */ struct sli4_sge_diseed *diseed =NULL ;dma_addr_t physaddr; -int i =0 , num_sge =0 , status; -uint32_t reftag; +int i =0 , status; +uint32_t reftag, num_sge =0 ;uint8_t txop, rxop;#ifdef CONFIG_SCSI_LPFC_DEBUG_FS uint32_t rc;
@@ -2124,7 +2124,7 @@ lpfc_bg_setup_sgl(struct lpfc_hba *phba, struct scsi_cmnd *sc,* * Returns the number of SGEs added to the SGL. **/ -static int +static uint32_t lpfc_bg_setup_sgl_prot (struct lpfc_hba *phba,struct scsi_cmnd *sc,struct sli4_sge *sgl,int datacnt,int protcnt,struct lpfc_io_buf *lpfc_cmd)
@@ -2148,8 +2148,8 @@ lpfc_bg_setup_sgl_prot(struct lpfc_hba *phba, struct scsi_cmnd *sc,uint32_t rc;#endif uint32_t checking =1 ; -uint32_t dma_offset =0 ; -int num_sge =0 , j =2 ; +uint32_t dma_offset =0 , num_sge =0 ; +int j =2 ;struct sli4_hybrid_sgl *sgl_xtra =NULL ; sgpe =scsi_prot_sglist (sc);
drivers/soc/renesas/r8a77980-sysc.c +2 -1
@@ -25,7 +25,8 @@ static const struct rcar_sysc_area r8a77980_areas[] __initconst = { PD_CPU_NOCR }, {"ca53-cpu3" ,0x200 ,3 ,R8A77980_PD_CA53_CPU3 ,R8A77980_PD_CA53_SCU , PD_CPU_NOCR }, - { "cr7", 0x240, 0, R8A77980_PD_CR7, R8A77980_PD_ALWAYS_ON }, + { "cr7", 0x240, 0, R8A77980_PD_CR7, R8A77980_PD_ALWAYS_ON, + PD_CPU_NOCR }, { "a3ir", 0x180, 0, R8A77980_PD_A3IR, R8A77980_PD_ALWAYS_ON }, { "a2ir0", 0x400, 0, R8A77980_PD_A2IR0, R8A77980_PD_A3IR }, { "a2ir1", 0x400, 1, R8A77980_PD_A2IR1, R8A77980_PD_A3IR },
drivers/spi/spi-hisi-sfc-v3xx.c +5 -0
@@ -365,6 +365,11 @@ static const struct spi_controller_mem_ops hisi_sfc_v3xx_mem_ops = {static irqreturn_t hisi_sfc_v3xx_isr (int irq,void *data) {struct hisi_sfc_v3xx_host *host = data; +u32 reg; + + reg =readl (host->regbase +HISI_SFC_V3XX_INT_STAT ); +if (!reg) +return IRQ_NONE ;hisi_sfc_v3xx_disable_int (host);
drivers/spi/spi-sh-msiof.c +8 -8
@@ -137,14 +137,14 @@ struct sh_msiof_spi_priv {/* SIFCTR */ #define SIFCTR_TFWM_MASK GENMASK(31, 29)/* Transmit FIFO Watermark */ -#define SIFCTR_TFWM_64 (0 << 29)/* Transfer Request when 64 empty stages */ -#define SIFCTR_TFWM_32 (1 << 29)/* Transfer Request when 32 empty stages */ -#define SIFCTR_TFWM_24 (2 << 29)/* Transfer Request when 24 empty stages */ -#define SIFCTR_TFWM_16 (3 << 29)/* Transfer Request when 16 empty stages */ -#define SIFCTR_TFWM_12 (4 << 29)/* Transfer Request when 12 empty stages */ -#define SIFCTR_TFWM_8 (5 << 29)/* Transfer Request when 8 empty stages */ -#define SIFCTR_TFWM_4 (6 << 29)/* Transfer Request when 4 empty stages */ -#define SIFCTR_TFWM_1 (7 << 29)/* Transfer Request when 1 empty stage */ +#define SIFCTR_TFWM_64 (0UL << 29)/* Transfer Request when 64 empty stages */ +#define SIFCTR_TFWM_32 (1UL << 29)/* Transfer Request when 32 empty stages */ +#define SIFCTR_TFWM_24 (2UL << 29)/* Transfer Request when 24 empty stages */ +#define SIFCTR_TFWM_16 (3UL << 29)/* Transfer Request when 16 empty stages */ +#define SIFCTR_TFWM_12 (4UL << 29)/* Transfer Request when 12 empty stages */ +#define SIFCTR_TFWM_8 (5UL << 29)/* Transfer Request when 8 empty stages */ +#define SIFCTR_TFWM_4 (6UL << 29)/* Transfer Request when 4 empty stages */ +#define SIFCTR_TFWM_1 (7UL << 29)/* Transfer Request when 1 empty stage */ #define SIFCTR_TFUA_MASK GENMASK(26, 20)/* Transmit FIFO Usable Area */ #define SIFCTR_TFUA_SHIFT 20#define SIFCTR_TFUA (i) ((i) << SIFCTR_TFUA_SHIFT)
drivers/target/target_core_device.c +0 -5
@@ -150,7 +150,6 @@ int transport_lookup_tmr_lun(struct se_cmd *se_cmd)struct se_session *se_sess = se_cmd->se_sess;struct se_node_acl *nacl = se_sess->se_node_acl;struct se_tmr_req *se_tmr = se_cmd->se_tmr_req; -unsigned long flags;rcu_read_lock (); deve =target_nacl_find_deve (nacl, se_cmd->orig_fe_lun);
@@ -181,10 +180,6 @@ int transport_lookup_tmr_lun(struct se_cmd *se_cmd) se_cmd->se_dev =rcu_dereference_raw (se_lun->lun_se_dev); se_tmr->tmr_dev =rcu_dereference_raw (se_lun->lun_se_dev); -spin_lock_irqsave (&se_tmr->tmr_dev->se_tmr_lock, flags); -list_add_tail (&se_tmr->tmr_list, &se_tmr->tmr_dev->dev_tmr_list); -spin_unlock_irqrestore (&se_tmr->tmr_dev->se_tmr_lock, flags); -return 0 ; }EXPORT_SYMBOL (transport_lookup_tmr_lun);
drivers/target/target_core_transport.c +4 -0
@@ -3436,6 +3436,10 @@ int transport_generic_handle_tmr(unsigned long flags;bool aborted = false; +spin_lock_irqsave (&cmd->se_dev->se_tmr_lock, flags); +list_add_tail (&cmd->se_tmr_req->tmr_list, &cmd->se_dev->dev_tmr_list); +spin_unlock_irqrestore (&cmd->se_dev->se_tmr_lock, flags); +spin_lock_irqsave (&cmd->t_state_lock, flags);if (cmd->transport_state &CMD_T_ABORTED ) { aborted = true;
drivers/tty/hvc/hvc_xen.c +17 -2
@@ -43,6 +43,7 @@ struct xencons_info {int irq;int vtermno;grant_ref_t gntref; +spinlock_t ring_lock; };static LIST_HEAD (xenconsoles);
@@ -89,12 +90,15 @@ static int __write_console(struct xencons_info *xencons,XENCONS_RING_IDX cons, prod;struct xencons_interface *intf = xencons->intf;int sent =0 ; +unsigned long flags; +spin_lock_irqsave (&xencons->ring_lock, flags); cons = intf->out_cons; prod = intf->out_prod;mb ();/* update queue values before going on */ if ((prod - cons) >sizeof (intf->out)) { +spin_unlock_irqrestore (&xencons->ring_lock, flags);pr_err_once ("xencons: Illegal ring page indices" );return -EINVAL ; }
@@ -104,6 +108,7 @@ static int __write_console(struct xencons_info *xencons,wmb ();/* write ring before updating pointer */ intf->out_prod = prod; +spin_unlock_irqrestore (&xencons->ring_lock, flags);if (sent)notify_daemon (xencons);
@@ -146,16 +151,19 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len)int recv =0 ;struct xencons_info *xencons =vtermno_to_xencons (vtermno);unsigned int eoiflag =0 ; +unsigned long flags;if (xencons ==NULL )return -EINVAL ; intf = xencons->intf; +spin_lock_irqsave (&xencons->ring_lock, flags); cons = intf->in_cons; prod = intf->in_prod;mb ();/* get pointers before reading ring */ if ((prod - cons) >sizeof (intf->in)) { +spin_unlock_irqrestore (&xencons->ring_lock, flags);pr_err_once ("xencons: Illegal ring page indices" );return -EINVAL ; }
@@ -179,10 +187,13 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len) xencons->out_cons = intf->out_cons; xencons->out_cons_same =0 ; } +if (!recv && xencons->out_cons_same++ >1 ) { + eoiflag =XEN_EOI_FLAG_SPURIOUS ; + } +spin_unlock_irqrestore (&xencons->ring_lock, flags); +if (recv) {notify_daemon (xencons); - }else if (xencons->out_cons_same++ >1 ) { - eoiflag =XEN_EOI_FLAG_SPURIOUS ; }xen_irq_lateeoi (xencons->irq, eoiflag);
@@ -239,6 +250,7 @@ static int xen_hvm_console_init(void) info =kzalloc (sizeof (struct xencons_info ),GFP_KERNEL );if (!info)return -ENOMEM ; +spin_lock_init (&info->ring_lock); }else if (info->intf !=NULL ) {/* already configured */ return 0 ;
@@ -275,6 +287,7 @@ static int xen_hvm_console_init(void)static int xencons_info_pv_init (struct xencons_info *info,int vtermno) { +spin_lock_init (&info->ring_lock); info->evtchn = xen_start_info->console.domU.evtchn;/* GFN == MFN for PV guest */ info->intf =gfn_to_virt (xen_start_info->console.domU.mfn);
@@ -325,6 +338,7 @@ static int xen_initial_domain_console_init(void) info =kzalloc (sizeof (struct xencons_info ),GFP_KERNEL );if (!info)return -ENOMEM ; +spin_lock_init (&info->ring_lock); } info->irq =bind_virq_to_irq (VIRQ_CONSOLE ,0 , false);
@@ -485,6 +499,7 @@ static int xencons_probe(struct xenbus_device *dev, info =kzalloc (sizeof (struct xencons_info ),GFP_KERNEL );if (!info)return -ENOMEM ; +spin_lock_init (&info->ring_lock);dev_set_drvdata (&dev->dev, info); info->xbdev = dev; info->vtermno =xenbus_devid_to_vtermno (devid);
drivers/usb/cdns3/gadget.c +6 -2
@@ -837,7 +837,11 @@ void cdns3_gadget_giveback(struct cdns3_endpoint *priv_ep,return ; } -if (request->complete) { +/* +* zlp request is appended by driver, needn't call usb_gadget_giveback_request() to notify +* gadget composite driver. +*/ +if (request->complete && request->buf != priv_dev->zlp_buf) {spin_unlock (&priv_dev->lock);usb_gadget_giveback_request (&priv_ep->endpoint, request);
@@ -2538,11 +2542,11 @@ static int cdns3_gadget_ep_disable(struct usb_ep *ep)while (!list_empty (&priv_ep->wa2_descmiss_req_list)) { priv_req =cdns3_next_priv_request (&priv_ep->wa2_descmiss_req_list); +list_del_init (&priv_req->list);kfree (priv_req->request.buf);cdns3_gadget_ep_free_request (&priv_ep->endpoint, &priv_req->request); -list_del_init (&priv_req->list); --priv_ep->wa2_counter; }
drivers/usb/gadget/function/f_ncm.c +9 -1
@@ -1349,7 +1349,15 @@ static int ncm_unwrap_ntb(struct gether *port, "Parsed NTB with %d frames\n", dgram_counter); to_process -= block_len; -if (to_process !=0 ) { + +/* +* Windows NCM driver avoids USB ZLPs by adding a 1-byte +* zero pad as needed. +*/ +if (to_process ==1 && + (*(unsigned char *)(ntb_ptr + block_len) ==0x00 )) { + to_process--; + }else if (to_process >0 ) { ntb_ptr = (unsigned char *)(ntb_ptr + block_len); goto parse_ntb; }
drivers/usb/roles/class.c +21 -8
@@ -19,7 +19,9 @@ static struct class *role_class;struct usb_role_switch {struct device dev;struct mutex lock;/* device lock*/ +struct module *module;/* the module this device depends on */ enum usb_role role; +bool registered;/* From descriptor */ struct device *usb2_port;
@@ -46,6 +48,9 @@ int usb_role_switch_set_role(struct usb_role_switch *sw, enum usb_role role)if (IS_ERR_OR_NULL (sw))return 0 ; +if (!sw->registered) +return -EOPNOTSUPP ; +mutex_lock (&sw->lock); ret = sw->set (sw, role);
@@ -71,7 +76,7 @@ enum usb_role usb_role_switch_get_role(struct usb_role_switch *sw) {enum usb_role role; -if (IS_ERR_OR_NULL (sw)) +if (IS_ERR_OR_NULL (sw) || !sw->registered)return USB_ROLE_NONE ;mutex_lock (&sw->lock);
@@ -133,7 +138,7 @@ struct usb_role_switch *usb_role_switch_get(struct device *dev) usb_role_switch_match);if (!IS_ERR_OR_NULL (sw)) -WARN_ON (!try_module_get (sw->dev.parent->driver->owner)); +WARN_ON (!try_module_get (sw->module));return sw; }
@@ -155,7 +160,7 @@ struct usb_role_switch *fwnode_usb_role_switch_get(struct fwnode_handle *fwnode) sw =fwnode_connection_find_match (fwnode,"usb-role-switch" ,NULL , usb_role_switch_match);if (!IS_ERR_OR_NULL (sw)) -WARN_ON (!try_module_get (sw->dev.parent->driver->owner)); +WARN_ON (!try_module_get (sw->module));return sw; }
@@ -170,7 +175,7 @@ EXPORT_SYMBOL_GPL(fwnode_usb_role_switch_get);void usb_role_switch_put (struct usb_role_switch *sw) {if (!IS_ERR_OR_NULL (sw)) { -module_put (sw->dev.parent->driver->owner); +module_put (sw->module);put_device (&sw->dev); } }
@@ -187,15 +192,18 @@ struct usb_role_switch * usb_role_switch_find_by_fwnode(const struct fwnode_handle *fwnode) {struct device *dev; +struct usb_role_switch *sw =NULL ;if (!fwnode)return NULL ; dev =class_find_device_by_fwnode (role_class, fwnode); -if (dev) -WARN_ON (!try_module_get (dev->parent->driver->owner)); +if (dev) { + sw =to_role_switch (dev); +WARN_ON (!try_module_get (sw->module)); + } -return dev ?to_role_switch (dev) :NULL ; +return sw; }EXPORT_SYMBOL_GPL (usb_role_switch_find_by_fwnode);
@@ -328,6 +336,7 @@ usb_role_switch_register(struct device *parent, sw->set = desc->set; sw->get = desc->get; + sw->module = parent->driver->owner; sw->dev.parent = parent; sw->dev.fwnode = desc->fwnode; sw->dev.class = role_class;
@@ -342,6 +351,8 @@ usb_role_switch_register(struct device *parent,return ERR_PTR (ret); } + sw->registered = true; +/* TODO: Symlinks for the host port and the device controller. */ return sw;
@@ -356,8 +367,10 @@ EXPORT_SYMBOL_GPL(usb_role_switch_register);*/ void usb_role_switch_unregister (struct usb_role_switch *sw) { -if (!IS_ERR_OR_NULL (sw)) +if (!IS_ERR_OR_NULL (sw)) { + sw->registered = false;device_unregister (&sw->dev); + } }EXPORT_SYMBOL_GPL (usb_role_switch_unregister);
drivers/video/fbdev/savage/savagefb_driver.c +3 -0
@@ -868,6 +868,9 @@ static int savagefb_check_var(struct fb_var_screeninfo *var,DBG ("savagefb_check_var" ); +if (!var->pixclock) +return -EINVAL ; + var->transp.offset =0 ; var->transp.length =0 ;switch (var->bits_per_pixel) {
drivers/video/fbdev/sis/sis_main.c +2 -0
@@ -1474,6 +1474,8 @@ sisfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) vtotal = var->upper_margin + var->lower_margin + var->vsync_len; +if (!var->pixclock) +return -EINVAL ; pixclock = var->pixclock;if ((var->vmode &FB_VMODE_MASK ) ==FB_VMODE_NONINTERLACED ) {
fs/afs/volume.c +2 -2
@@ -302,7 +302,7 @@ static int afs_update_volume_status(struct afs_volume *volume, struct key *key) {struct afs_server_list *new, *old, *discard;struct afs_vldb_entry *vldb; -char idbuf[16 ]; +char idbuf[24 ];int ret, idsz;_enter ("" );
@@ -310,7 +310,7 @@ static int afs_update_volume_status(struct afs_volume *volume, struct key *key)/* We look up an ID by passing it as a decimal string in the * operation's name parameter. */ - idsz =sprintf (idbuf,"%llu" , volume->vid); + idsz =snprintf (idbuf,sizeof (idbuf),"%llu" , volume->vid); vldb =afs_vl_lookup_vldb (volume->cell, key, idbuf, idsz);if (IS_ERR (vldb)) {
fs/aio.c +8 -1
@@ -569,6 +569,13 @@ void kiocb_set_cancel_fn(struct kiocb *iocb, kiocb_cancel_fn *cancel)struct kioctx *ctx = req->ki_ctx;unsigned long flags; +/* +* kiocb didn't come from aio or is neither a read nor a write, hence +* ignore it. +*/ +if (!(iocb->ki_flags &IOCB_AIO_RW )) +return ; +if (WARN_ON_ONCE (!list_empty (&req->ki_list)))return ;
@@ -1454,7 +1461,7 @@ static int aio_prep_rw(struct kiocb *req, const struct iocb *iocb) req->ki_complete = aio_complete_rw; req->private =NULL ; req->ki_pos = iocb->aio_offset; - req->ki_flags =iocb_flags (req->ki_filp); + req->ki_flags =iocb_flags (req->ki_filp) |IOCB_AIO_RW ;if (iocb->aio_flags &IOCB_FLAG_RESFD ) req->ki_flags |=IOCB_EVENTFD ; req->ki_hint =ki_hint_validate (file_write_hint (req->ki_filp));
fs/btrfs/ctree.h +1 -1
@@ -2879,7 +2879,7 @@ struct btrfs_dir_item * btrfs_lookup_dir_index_item(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct btrfs_path *path, u64 dir, - u64 objectid, const char *name, int name_len, + u64 index, const char *name, int name_len, int mod);struct btrfs_dir_item * btrfs_search_dir_index_item(struct btrfs_root *root,
fs/btrfs/dir-item.c +75 -47
191 lines not on this page · raw message
fs/btrfs/inode.c +42 -6
78 lines not on this page · raw message
fs/btrfs/tree-checker.c +23 -2
@@ -1189,7 +1189,8 @@ static void extent_err(const struct extent_buffer *eb, int slot, }static int check_extent_item (struct extent_buffer *leaf, -struct btrfs_key *key,int slot) +struct btrfs_key *key,int slot, +struct btrfs_key *prev_key) {struct btrfs_fs_info *fs_info = leaf->fs_info;struct btrfs_extent_item *ei;
@@ -1400,6 +1401,26 @@ static int check_extent_item(struct extent_buffer *leaf, total_refs, inline_refs);return -EUCLEAN ; } + +if ((prev_key->type ==BTRFS_EXTENT_ITEM_KEY ) || + (prev_key->type ==BTRFS_METADATA_ITEM_KEY )) { +u64 prev_end = prev_key->objectid; + +if (prev_key->type ==BTRFS_METADATA_ITEM_KEY ) + prev_end += fs_info->nodesize; +else + prev_end += prev_key->offset; + +if (unlikely (prev_end > key->objectid)) { +extent_err (leaf, slot, +"previous extent [%llu %u %llu] overlaps current extent [%llu %u %llu]" , + prev_key->objectid, prev_key->type, + prev_key->offset, key->objectid, key->type, + key->offset); +return -EUCLEAN ; + } + } +return 0 ; }
@@ -1568,7 +1589,7 @@ static int check_leaf_item(struct extent_buffer *leaf,break ;case BTRFS_EXTENT_ITEM_KEY :case BTRFS_METADATA_ITEM_KEY : - ret =check_extent_item (leaf, key, slot); + ret =check_extent_item (leaf, key, slot, prev_key);break ;case BTRFS_TREE_BLOCK_REF_KEY :case BTRFS_SHARED_DATA_REF_KEY :
fs/btrfs/tree-log.c +4 -10
@@ -912,8 +912,7 @@ static noinline int inode_in_dir(struct btrfs_root *root, di =btrfs_lookup_dir_index_item (NULL , root, path, dirid, index, name, name_len,0 );if (IS_ERR (di)) { -if (PTR_ERR (di) != -ENOENT ) - ret =PTR_ERR (di); + ret =PTR_ERR (di); goto out; }else if (di) {btrfs_dir_item_key_to_cpu (path->nodes[0 ], di, &location);
@@ -1149,8 +1148,7 @@ static inline int __add_inode_ref(struct btrfs_trans_handle *trans, di =btrfs_lookup_dir_index_item (trans, root, path,btrfs_ino (dir), ref_index, name, namelen,0 );if (IS_ERR (di)) { -if (PTR_ERR (di) != -ENOENT ) -return PTR_ERR (di); +return PTR_ERR (di); }else if (di) { ret =drop_one_dir_item (trans, root, path, dir, di);if (ret)
@@ -1976,9 +1974,6 @@ static noinline int replay_one_name(struct btrfs_trans_handle *trans, goto out; } -if (dst_di ==ERR_PTR (-ENOENT )) - dst_di =NULL ; -if (IS_ERR (dst_di)) { ret =PTR_ERR (dst_di); goto out;
@@ -2286,7 +2281,7 @@ static noinline int check_item_in_log(struct btrfs_trans_handle *trans, dir_key->offset, name, name_len, 0); } -if (!log_di || log_di ==ERR_PTR (-ENOENT )) { +if (!log_di) {btrfs_dir_item_key_to_cpu (eb, di, &location);btrfs_release_path (path);btrfs_release_path (log_path);
@@ -3495,8 +3490,7 @@ int btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,if (err == -ENOSPC ) {btrfs_set_log_full_commit (trans); err =0 ; - }else if (err <0 && err != -ENOENT ) { -/* ENOENT can be returned if the entry hasn't been fsynced yet */ + }else if (err <0 ) {btrfs_abort_transaction (trans, err); }
fs/cifs/smb2ops.c +12 -7
@@ -82,6 +82,7 @@ smb2_add_credits(struct TCP_Server_Info *server, *val =65000 ;/* Don't get near 64K credits, avoid srv bugs */ pr_warn_once ("server overflowed SMB3 credits\n" ); } +WARN_ON_ONCE (server->in_flight ==0 ); server->in_flight--;if (server->in_flight ==0 && (optype &CIFS_OP_MASK ) !=CIFS_NEG_OP ) rc =change_conf (server);
@@ -818,10 +819,12 @@ int open_shroot(unsigned int xid, struct cifs_tcon *tcon,if (o_rsp->OplockLevel ==SMB2_OPLOCK_LEVEL_LEASE ) {kref_get (&tcon->crfid.refcount); tcon->crfid.has_lease = true; -smb2_parse_contexts (server, o_rsp, + rc =smb2_parse_contexts (server, rsp_iov, &oparms.fid->epoch, oparms.fid->lease_key, &oplock,NULL ,NULL ); +if (rc) + goto oshr_exit; }else goto oshr_exit;
@@ -4892,6 +4895,7 @@ receive_encrypted_standard(struct TCP_Server_Info *server,struct smb2_sync_hdr *shdr;unsigned int pdu_length = server->pdu_size;unsigned int buf_size; +unsigned int next_cmd;struct mid_q_entry *mid_entry;int next_is_large;char *next_buffer =NULL ;
@@ -4920,14 +4924,15 @@ receive_encrypted_standard(struct TCP_Server_Info *server, next_is_large = server->large_buf; one_more: shdr = (struct smb2_sync_hdr *)buf; -if (shdr->NextCommand) { + next_cmd =le32_to_cpu (shdr->NextCommand); +if (next_cmd) { +if (WARN_ON_ONCE (next_cmd > pdu_length)) +return -1 ;if (next_is_large) next_buffer = (char *)cifs_buf_get ();else next_buffer = (char *)cifs_small_buf_get (); -memcpy (next_buffer, - buf +le32_to_cpu (shdr->NextCommand), - pdu_length -le32_to_cpu (shdr->NextCommand)); +memcpy (next_buffer, buf + next_cmd, pdu_length - next_cmd); } mid_entry =smb2_find_mid (server, buf);
@@ -4951,8 +4956,8 @@ receive_encrypted_standard(struct TCP_Server_Info *server,else ret =cifs_handle_standard (server, mid_entry); -if (ret ==0 && shdr->NextCommand) { - pdu_length -=le32_to_cpu (shdr->NextCommand); +if (ret ==0 && next_cmd) { + pdu_length -= next_cmd; server->large_buf = next_is_large;if (next_is_large) server->bigbuf = buf = next_buffer;
fs/cifs/smb2pdu.c +56 -37
126 lines not on this page · raw message
fs/cifs/smb2proto.h +7 -5
@@ -270,11 +270,13 @@ extern int smb3_validate_negotiate(const unsigned int, struct cifs_tcon *);extern enum securityEnum smb2_select_sectype (struct TCP_Server_Info *,enum securityEnum ); -extern void smb2_parse_contexts (struct TCP_Server_Info *server, -struct smb2_create_rsp *rsp, -unsigned int *epoch,char *lease_key, -__u8 *oplock,struct smb2_file_all_info *buf, -struct create_posix_rsp *posix); +int smb2_parse_contexts (struct TCP_Server_Info *server, +struct kvec *rsp_iov, +unsigned int *epoch, +char *lease_key,__u8 *oplock, +struct smb2_file_all_info *buf, +struct create_posix_rsp *posix); +extern int smb3_encryption_required (const struct cifs_tcon *tcon);extern int smb2_validate_iov (unsigned int offset,unsigned int buffer_length,struct kvec *iov,unsigned int min_buf_size);
fs/erofs/decompressor.c +14 -10
@@ -24,7 +24,8 @@ struct z_erofs_decompressor {*/ int (*prepare_destpages)(struct z_erofs_decompress_req *rq,struct list_head *pagepool); -int (*decompress)(struct z_erofs_decompress_req *rq,u8 *out); +int (*decompress)(struct z_erofs_decompress_req *rq,u8 *out, +u8 *obase);char *name; };
@@ -114,10 +115,13 @@ static void *generic_copy_inplace_data(struct z_erofs_decompress_req *rq,return tmp; } -static int z_erofs_lz4_decompress (struct z_erofs_decompress_req *rq,u8 *out) +static int z_erofs_lz4_decompress (struct z_erofs_decompress_req *rq,u8 *out, +u8 *obase) { +const uint nrpages_out =PAGE_ALIGN (rq->pageofs_out + + rq->outputsize) >>PAGE_SHIFT ;unsigned int inputmargin, inlen; -u8 *src; +u8 *src, *src2;bool copied, support_0padding;int ret;
@@ -125,6 +129,7 @@ static int z_erofs_lz4_decompress(struct z_erofs_decompress_req *rq, u8 *out)return -EOPNOTSUPP ; src =kmap_atomic (*rq->in); + src2 = src; inputmargin =0 ; support_0padding = false;
@@ -148,16 +153,15 @@ static int z_erofs_lz4_decompress(struct z_erofs_decompress_req *rq, u8 *out)if (rq->inplace_io) {const uint oend = (rq->pageofs_out + rq->outputsize) & ~PAGE_MASK ; -const uint nr =PAGE_ALIGN (rq->pageofs_out + - rq->outputsize) >>PAGE_SHIFT ; -if (rq->partial_decoding || !support_0padding || - rq->out[nr -1 ] != rq->in[0 ] || + rq->out[nrpages_out -1 ] != rq->in[0 ] || rq->inputsize - oend <LZ4_DECOMPRESS_INPLACE_MARGIN (inlen)) { src =generic_copy_inplace_data (rq, src, inputmargin); inputmargin =0 ; copied = true; + }else { + src = obase + ((nrpages_out -1 ) <<PAGE_SHIFT ); } }
@@ -187,7 +191,7 @@ static int z_erofs_lz4_decompress(struct z_erofs_decompress_req *rq, u8 *out)if (copied)erofs_put_pcpubuf (src);else -kunmap_atomic (src); +kunmap_atomic (src2);return ret; }
@@ -257,7 +261,7 @@ static int z_erofs_decompress_generic(struct z_erofs_decompress_req *rq,return PTR_ERR (dst); rq->inplace_io = false; - ret = alg->decompress (rq, dst); + ret = alg->decompress (rq, dst,NULL );if (!ret)copy_from_pcpubuf (rq->out, dst, rq->pageofs_out, rq->outputsize);
@@ -291,7 +295,7 @@ static int z_erofs_decompress_generic(struct z_erofs_decompress_req *rq, dst_maptype =2 ; dstmap_out: - ret = alg->decompress (rq, dst + rq->pageofs_out); + ret = alg->decompress (rq, dst + rq->pageofs_out, dst);if (!dst_maptype)kunmap_atomic (dst);
fs/ext4/extents.c +70 -41
144 lines not on this page · raw message
fs/ext4/mballoc.c +28 -5
@@ -823,6 +823,24 @@ void ext4_mb_generate_buddy(struct super_block *sb,atomic64_add (period, &sbi->s_mb_generation_time); } +static void mb_regenerate_buddy (struct ext4_buddy *e4b) +{ +int count; +int order =1 ; +void *buddy; + +while ((buddy =mb_find_buddy (e4b, order++, &count))) +ext4_set_bits (buddy,0 , count); + + e4b->bd_info->bb_fragments =0 ; +memset (e4b->bd_info->bb_counters,0 , +sizeof (*e4b->bd_info->bb_counters) * + (e4b->bd_sb->s_blocksize_bits +2 )); + +ext4_mb_generate_buddy (e4b->bd_sb, e4b->bd_buddy, + e4b->bd_bitmap, e4b->bd_group, e4b->bd_info); +} +/* The buddy information is attached the buddy cache inode * for convenience. The information regarding each group * is loaded via ext4_mb_load_buddy. The information involve
@@ -1505,6 +1523,8 @@ static void mb_free_blocks(struct inode *inode, struct ext4_buddy *e4b,ext4_mark_group_bitmap_corrupted ( sb, e4b->bd_group,EXT4_GROUP_INFO_BBITMAP_CORRUPT ); + }else { +mb_regenerate_buddy (e4b); } goto done; }
@@ -1854,6 +1874,9 @@ int ext4_mb_try_best_found(struct ext4_allocation_context *ac,return err;ext4_lock_group (ac->ac_sb, group); +if (unlikely (EXT4_MB_GRP_BBITMAP_CORRUPT (e4b->bd_info))) + goto out; + max =mb_find_extent (e4b, ex.fe_start, ex.fe_len, &ex);if (max >0 ) {
@@ -1861,6 +1884,7 @@ int ext4_mb_try_best_found(struct ext4_allocation_context *ac,ext4_mb_use_best_found (ac, e4b); } +out:ext4_unlock_group (ac->ac_sb, group);ext4_mb_unload_buddy (e4b);
@@ -1889,12 +1913,10 @@ int ext4_mb_find_by_goal(struct ext4_allocation_context *ac,if (err)return err; -if (unlikely (EXT4_MB_GRP_BBITMAP_CORRUPT (e4b->bd_info))) { -ext4_mb_unload_buddy (e4b); -return 0 ; - } -ext4_lock_group (ac->ac_sb, group); +if (unlikely (EXT4_MB_GRP_BBITMAP_CORRUPT (e4b->bd_info))) + goto out; + max =mb_find_extent (e4b, ac->ac_g_ex.fe_start, ac->ac_g_ex.fe_len, &ex); ex.fe_logical =0xDEADFA11 ;/* debug value */
@@ -1927,6 +1949,7 @@ int ext4_mb_find_by_goal(struct ext4_allocation_context *ac, ac->ac_b_ex = ex;ext4_mb_use_best_found (ac, e4b); } +out:ext4_unlock_group (ac->ac_sb, group);ext4_mb_unload_buddy (e4b);
fs/jbd2/checkpoint.c +43 -94
185 lines not on this page · raw message
fs/zonefs/super.c +39 -29
97 lines not on this page · raw message
net/netfilter/nf_conntrack_proto_sctp.c +1 -1
Lines of this file are not shown. View the raw message.
net/sched/Kconfig +0 -42
42 lines not on this page · raw message
net/sched/sch_atm.c deleted +0 -709
709 lines not on this page · raw message
net/sched/sch_cbq.c deleted +0 -1816
1,816 lines not on this page · raw message
net/sched/sch_dsmark.c deleted +0 -521
521 lines not on this page · raw message
sound/soc/intel/boards/bytcht_es8316.c +10 -4
Lines of this file are not shown. View the raw message.
sound/soc/intel/boards/bytcr_rt5640.c +30 -16
46 lines not on this page · raw message
sound/soc/intel/boards/bytcr_rt5651.c +25 -16
41 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.