Linux 5.10.21
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.21 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/devicetree/bindings/net/btusb.txt | 2 Documentation/devicetree/bindings/net/ethernet-controller.yaml | 5 Documentation/networking/ip-sysctl.rst | 7 Makefile | 2 arch/arm/xen/p2m.c | 35 ++ arch/parisc/kernel/irq.c | 4 arch/powerpc/lib/sstep.c | 79 ++++- arch/riscv/mm/init.c | 21 - arch/x86/events/intel/core.c | 3 arch/x86/include/asm/xen/page.h | 12 arch/x86/kernel/module.c | 1 arch/x86/kernel/reboot.c | 9 arch/x86/tools/relocs.c | 12 arch/x86/xen/p2m.c | 54 +++ arch/x86/xen/setup.c | 25 - crypto/tcrypt.c | 20 - drivers/block/nbd.c | 32 +- drivers/block/zram/zram_drv.c | 2 drivers/bluetooth/hci_h5.c | 5 drivers/edac/amd64_edac.c | 10 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 6 drivers/gpu/drm/amd/amdgpu/cz_ih.c | 37 +- drivers/gpu/drm/amd/amdgpu/iceland_ih.c | 36 +- drivers/gpu/drm/amd/amdgpu/tonga_ih.c | 37 +- drivers/gpu/drm/amd/display/dc/core/dc_link.c | 5 drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c | 1 drivers/gpu/drm/virtio/virtgpu_object.c | 5 drivers/infiniband/ulp/rtrs/rtrs-clt.c | 15 - drivers/infiniband/ulp/rtrs/rtrs-srv.c | 3 drivers/infiniband/ulp/rtrs/rtrs.c | 4 drivers/input/mouse/elan_i2c.h | 16 + drivers/input/mouse/elan_i2c_core.c | 13 drivers/input/mouse/elan_i2c_smbus.c | 8 drivers/input/mouse/elantech.c | 99 ++++++ drivers/input/mouse/elantech.h | 4 drivers/media/rc/mceusb.c | 9 drivers/media/usb/uvc/uvc_driver.c | 7 drivers/media/v4l2-core/v4l2-ctrls.c | 3 drivers/media/v4l2-core/v4l2-ioctl.c | 19 - drivers/net/ethernet/atheros/ag71xx.c | 4 drivers/net/phy/sfp-bus.c | 15 + drivers/net/phy/sfp.c | 112 +++++++ drivers/net/tap.c | 7 drivers/net/tun.c | 5 drivers/net/usb/qmi_wwan.c | 1 drivers/net/wireless/ath/ath10k/mac.c | 15 - drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c | 32 ++ drivers/net/wireless/mediatek/mt76/mt7615/mac.c | 20 + drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h | 2 drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c | 12 drivers/net/wireless/rsi/rsi_91x_hal.c | 3 drivers/net/wireless/rsi/rsi_91x_sdio.c | 6 drivers/net/wireless/rsi/rsi_91x_sdio_ops.c | 52 --- drivers/net/wireless/rsi/rsi_sdio.h | 8 drivers/net/wireless/ti/wl12xx/main.c | 3 drivers/net/wireless/ti/wlcore/main.c | 15 - drivers/net/wireless/ti/wlcore/wlcore.h | 3 drivers/net/xen-netback/netback.c | 12 drivers/nvme/host/core.c | 20 + drivers/nvme/host/nvme.h | 2 drivers/nvme/host/rdma.c | 18 + drivers/nvme/host/tcp.c | 18 + drivers/pci/pci.c | 9 drivers/remoteproc/mtk_scp.c | 4 drivers/scsi/libiscsi.c | 148 +++++----- drivers/scsi/scsi_transport_iscsi.c | 40 ++ drivers/staging/fwserial/fwserial.c | 2 drivers/staging/most/sound/sound.c | 2 drivers/staging/vc04_services/bcm2835-audio/bcm2835-ctl.c | 6 drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c | 2 drivers/staging/vc04_services/bcm2835-audio/bcm2835.c | 6 drivers/tty/n_tty.c | 87 ++++- drivers/tty/tty_io.c | 28 + drivers/tty/vt/consolemap.c | 2 drivers/video/fbdev/udlfb.c | 1 fs/btrfs/transaction.c | 11 fs/erofs/super.c | 4 fs/f2fs/namei.c | 8 fs/f2fs/segment.h | 4 fs/jfs/jfs_filsys.h | 1 fs/jfs/jfs_mount.c | 10 fs/namei.c | 43 +- fs/xfs/xfs_iops.c | 2 include/linux/netdevice.h | 3 include/linux/swap.h | 1 include/linux/zsmalloc.h | 2 include/net/bluetooth/hci.h | 8 include/uapi/linux/pkt_cls.h | 2 kernel/sched/core.c | 17 - kernel/sched/sched.h | 1 mm/hugetlb.c | 22 - mm/page_io.c | 5 mm/swapfile.c | 13 mm/zsmalloc.c | 17 - net/bluetooth/amp.c | 3 net/bluetooth/hci_core.c | 21 - net/bridge/br_sysfs_if.c | 9 net/core/dev.c | 42 ++ net/core/dev_ioctl.c | 20 - net/core/pktgen.c | 2 net/core/rtnetlink.c | 2 net/core/skbuff.c | 14 net/dsa/tag_rtl4_a.c | 43 +- net/hsr/hsr_framereg.c | 9 net/hsr/hsr_framereg.h | 1 net/hsr/hsr_main.h | 1 net/iucv/af_iucv.c | 1 net/mptcp/subflow.c | 6 net/psample/psample.c | 4 net/sched/cls_flower.c | 39 ++ security/smack/smackfs.c | 21 + security/tomoyo/file.c | 16 - security/tomoyo/network.c | 8 security/tomoyo/util.c | 24 - sound/pci/hda/patch_realtek.c | 13 sound/soc/intel/boards/bytcr_rt5640.c | 63 +++- sound/soc/intel/boards/bytcr_rt5651.c | 13 sound/soc/intel/boards/sof_sdw.c | 15 - sound/soc/intel/common/soc-intel-quirks.h | 25 + sound/soc/qcom/lpass-cpu.c | 1 120 files changed, 1388 insertions(+), 591 deletions(-)
Alexander Egorenkov (1):
net/af_iucv: remove WARN_ONCE on malformed RX packets
Alexandre Ghiti (1):
riscv: Get rid of MAX_EARLY_MAPPING_SIZE
Ananth N Mavinakayanahalli (2):
powerpc/sstep: Check instruction validity against ISA version before emulation powerpc/sstep: Fix incorrect return from analyze_instr()
Ard Biesheuvel (1):
crypto: tcrypt - avoid signed overflow in byte count
Borislav Petkov (1):
EDAC/amd64: Do not load on family 0x15, model 0x13
Chao Leng (3):
nvme-core: add cancel tagset helpers
nvme-rdma: add clean action for failed reconnection
nvme-tcp: add clean action for failed reconnection
Chao Yu (1):
f2fs: fix to set/clear I_LINKABLE under i_lock
Chris Leech (2):
scsi: iscsi: Ensure sysfs attributes are limited to PAGE_SIZE
scsi: iscsi: Verify lengths on passthrough PDUs
Chris Mi (1):
net: psample: Fix netlink skb length with tunnel info
Christian Gromm (1):
staging: most: sound: add sanity check for function argument
Claire Chang (1):
Bluetooth: hci_h5: Set HCI_QUIRK_SIMULTANEOUS_DISCOVERY for btrtl
Cong Wang (1):
net: fix dev_ifsioc_locked() race condition
DENG Qingfang (1):
net: ag71xx: remove unnecessary MTU reservation
Defang Bo (1):
drm/amdgpu: Add check to prevent IH overflow
Di Zhu (1):
pktgen: fix misuse of BUG_ON() in pktgen_thread_worker()
Dinghao Liu (1):
staging: fwserial: Fix error handling in fwserial_create
Eckhart Mohr (1):
ALSA: hda/realtek: Add quirk for Clevo NH55RZQ
Eric Dumazet (1):
tcp: fix tcp_rmem documentation
Fangrui Song (1):
x86/build: Treat R_386_PLT32 relocation as R_386_PC32
Gao Xiang (1):
erofs: fix shift-out-of-bounds of blkszbits
Geert Uytterhoeven (1):
dt-bindings: net: btusb: DT fix s/interrupt-name/interrupt-names/
Gopal Tiwari (1):
Bluetooth: Fix null pointer dereference in amp_read_loc_assoc_final_data
Greg Kroah-Hartman (1):
Linux 5.10.21
Hans Verkuil (1):
media: v4l2-ctrls.c: fix shift-out-of-bounds in std_validate
Hans de Goede (9):
Bluetooth: Add new HCI_QUIRK_NO_SUSPEND_NOTIFIER quirk
brcmfmac: Add DMI nvram filename quirk for Predia Basic tablet
brcmfmac: Add DMI nvram filename quirk for Voyo winpad A15 tablet
ASoC: Intel: bytcr_rt5640: Add new BYT_RT5640_NO_SPEAKERS quirk-flag
ASoC: Intel: Add DMI quirk table to soc_intel_is_byt_cr()
ASoC: Intel: bytcr_rt5640: Add quirk for the Estar Beauty HD MID 7316R tablet
ASoC: Intel: bytcr_rt5640: Add quirk for the Voyo Winpad A15 tablet
ASoC: Intel: bytcr_rt5651: Add quirk for the Jumper EZpad 7 tablet
ASoC: Intel: bytcr_rt5640: Add quirk for the Acer One S1002 tablet
Heiner Kallweit (1):
x86/reboot: Add Zotac ZBOX CI327 nano PCI reboot quirk
Jack Wang (3):
RDMA/rtrs: Do not signal for heatbeat RDMA/rtrs-clt: Use bitmask to check sess->flags RDMA/rtrs-srv: Do not signal REG_MR
Jaegeuk Kim (1):
f2fs: handle unallocated section and zone on pinned/atgc
Jan Beulich (2):
Xen/gnttab: handle p2m update errors on a per-slot basis
xen-netback: respect gnttab_map_refs()'s return value
Jens Axboe (2):
fs: make unlazy_walk() error handling consistent
swap: fix swapfile read/write offset
Jim Mattson (1):
perf/x86/kvm: Add Cascade Lake Xeon steppings to isolation_ucodes[]
Jingle Wu (1):
Input: elan_i2c - add new trackpoint report type 0x5F
Jingwen Chen (1):
drm/amd/amdgpu: add error handling to amdgpu_virt_read_pf2vf_data
Jiri Slaby (1):
vt/consolemap: do font sum unsigned
John David Anglin (1):
parisc: Bump 64-bit IRQ stack size to 64 KB
Josef Bacik (2):
nbd: handle device refs for DESTROY_ON_DISCONNECT properly
btrfs: fix error handling in commit_fs_roots
Juerg Haefliger (1):
staging: bcm2835-audio: Replace unsafe strcpy() with strscpy()
Juergen Gross (1):
xen: fix p2m size in dom0 for disabled memory hotplug case
Juri Lelli (1):
sched/features: Fix hrtick reprogramming
Lech Perczak (1):
net: usb: qmi_wwan: support ZTE P685M modem
Lee Duncan (1):
scsi: iscsi: Restrict sessions and handles to admin capabilities
Li Xinhai (1):
mm/hugetlb.c: fix unnecessary address expansion of pmd sharing
Linus Torvalds (5):
tty: fix up iterate_tty_read() EOVERFLOW handling
tty: fix up hung_up_tty_read() conversion
tty: clean up legacy leftovers from n_tty line discipline
tty: teach n_tty line discipline about the new "cookie continuations"
tty: teach the n_tty ICANON case about the new "cookie continuations" too
Linus Walleij (1):
net: dsa: tag_rtl4_a: Support also egress tags
Marco Elver (1):
net: fix up truesize of cloned skb in skb_prepare_for_shift()
Marco Wenzel (1):
net: hsr: add support for EntryForgetTime
Marek Vasut (2):
rsi: Fix TX EAPOL packet handling against iwlwifi AP
rsi: Move card interrupt handling to RX thread
Miaoqing Pan (1):
ath10k: fix wmi mgmt tx queue full due to race condition
Nicholas Kazlauskas (1):
drm/amd/display: Guard against NULL pointer deref when get_i2c_info fails
Nirmoy Das (1):
PCI: Add a REBAR size quirk for Sapphire RX 5600 XT Pulse
Pali Rohár (2):
net: sfp: add mode quirk for GPON module Ubiquiti U-Fiber Instant
net: sfp: add workaround for Realtek RTL8672 and RTL9601C chips
Paolo Abeni (1):
mptcp: do not wakeup listener for MPJ subflows
Peter Zijlstra (1):
sched/core: Allow try_invoke_on_locked_down_task() with irqs disabled
Pierre-Louis Bossart (1):
ASoC: Intel: sof-sdw: indent and add quirks consistently
Rander Wang (1):
ASoC: Intel: sof_sdw: detect DMIC number based on mach params
Randy Dunlap (1):
JFS: more checks for invalid superblock
Ricardo Ribalda (1):
media: uvcvideo: Allow entities with no pads
Rokudo Yan (1):
zsmalloc: account the number of compacted pages correctly
Russell King (2):
dt-bindings: ethernet-controller: fix fixed-link specification
net: sfp: VSOL V2801F / CarlitoxxPro CPGOS03-0490 v2.0 workaround
Ryder Lee (1):
mt76: mt7615: reset token when mac_reset happens
Sabyrzhan Tasbolatov (1):
smackfs: restrict bytes count in smackfs write functions
Sakari Ailus (1):
media: v4l: ioctl: Fix memory leak in video_usercopy
Sean Young (1):
media: mceusb: sanity check for prescaler value
Sergey Senozhatsky (1):
drm/virtio: use kvmalloc for large allocations
Souptick Joarder (1):
remoteproc/mediatek: Fix kernel test robot warning
Stephen Boyd (1):
ASoC: qcom: Remove useless debug print
Takashi Iwai (1):
ALSA: hda/realtek: Apply dual codec quirks for MSI Godlike X570 board
Tetsuo Handa (1):
tomoyo: ignore data race while checking quota
Tian Tao (1):
drm/hisilicon: Fix use-after-free
Tony Lindgren (1):
wlcore: Fix command execute failure 19 for wl12xx
Vamshi K Sthambamkadi (1):
Bluetooth: btusb: fix memory leak on suspend and resume
Vladimir Oltean (1):
net: bridge: use switchdev for port flags set through sysfs too
Werner Sembach (1):
ALSA: hda/realtek: Add quirk for Intel NUC 10
Yumei Huang (1):
xfs: Fix assert failure in xfs_setattr_size()
Zqiang (1):
udlfb: Fix memory leak in dlfb_usb_probe
jingle.wu (1):
Input: elantech - fix protocol errors for some trackpoints in SMBus mode
wenxu (1):
net/sched: cls_flower: Reject invalid ct_state flags rules
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/net/btusb.txt +1 -1
@@ -38,7 +38,7 @@ Following example uses irq pin number 3 of gpio0 for out of band wake-on-bt: compatible = "usb1286,204e"; reg = <1>; interrupt-parent = <&gpio0>; - interrupt-name = "wakeup"; + interrupt-names = "wakeup"; interrupts = <3 IRQ_TYPE_LEVEL_LOW>; }; };
Documentation/devicetree/bindings/net/ethernet-controller.yaml +5 -0
@@ -206,6 +206,11 @@ properties: Indicates that full-duplex is used. When absent, half duplex is assumed. + pause: + $ref: /schemas/types.yaml#definitions/flag + description: + Indicates that pause should be enabled. + asym-pause: $ref: /schemas/types.yaml#definitions/flag description:
Documentation/networking/ip-sysctl.rst +3 -4
@@ -630,16 +630,15 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max default: initial size of receive buffer used by TCP sockets. This value overrides net.core.rmem_default used by other protocols. - Default: 87380 bytes. This value results in window of 65535 with - default setting of tcp_adv_win_scale and tcp_app_win:0 and a bit - less for default tcp_app_win. See below about these variables. + Default: 131072 bytes. + This value results in initial window of 65535. max: maximal size of receive buffer allowed for automatically selected receiver buffers for TCP socket. This value does not override net.core.rmem_max. Calling setsockopt() with SO_RCVBUF disables automatic tuning of that socket's receive buffer size, in which case this value is ignored. - Default: between 87380B and 6MB, depending on RAM size. + Default: between 131072 and 6MB, depending on RAM size. tcp_sack - BOOLEAN Enable select acknowledgments (SACKS).
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 20 +SUBLEVEL = 21 EXTRAVERSION = NAME = Dare mighty things
arch/arm/xen/p2m.c +31 -4
@@ -93,12 +93,39 @@ int set_foreign_p2m_mapping(struct gnttab_map_grant_ref *map_ops,int i;for (i =0 ; i < count; i++) { +struct gnttab_unmap_grant_ref unmap; +int rc; +if (map_ops[i].status)continue ; -if (unlikely (!set_phys_to_machine (map_ops[i].host_addr >>XEN_PAGE_SHIFT , - map_ops[i].dev_bus_addr >>XEN_PAGE_SHIFT ))) { -return -ENOMEM ; - } +if (likely (set_phys_to_machine (map_ops[i].host_addr >>XEN_PAGE_SHIFT , + map_ops[i].dev_bus_addr >>XEN_PAGE_SHIFT ))) +continue ; + +/* +* Signal an error for this slot. This in turn requires +* immediate unmapping. +*/ + map_ops[i].status = GNTST_general_error; + unmap.host_addr = map_ops[i].host_addr, + unmap.handle = map_ops[i].handle; + map_ops[i].handle = ~0 ; +if (map_ops[i].flags & GNTMAP_device_map) + unmap.dev_bus_addr = map_ops[i].dev_bus_addr; +else + unmap.dev_bus_addr =0 ; + +/* +* Pre-populate the status field, to be recognizable in +* the log message below. +*/ + unmap.status =1 ; + + rc =HYPERVISOR_grant_table_op (GNTTABOP_unmap_grant_ref, + &unmap,1 ); +if (rc || unmap.status != GNTST_okay) +pr_err_once ("gnttab unmap failed: rc=%d st=%d\n" , + rc, unmap.status); }return 0 ;
arch/parisc/kernel/irq.c +4 -0
@@ -376,7 +376,11 @@ static inline int eirr_to_irq(unsigned long eirr)/* * IRQ STACK - used for irq handler */ +#ifdef CONFIG_64BIT +#define IRQ_STACK_SIZE (4096 << 4)/* 64k irq stack size */ +#else #define IRQ_STACK_SIZE (4096 << 3)/* 32k irq stack size */ +#endif union irq_stack_union {unsigned long stack[IRQ_STACK_SIZE /sizeof (unsigned long )];
arch/powerpc/lib/sstep.c +65 -14
285 lines not on this page · raw message
arch/riscv/mm/init.c +5 -16
@@ -222,8 +222,6 @@ pgd_t swapper_pg_dir[PTRS_PER_PGD] __page_aligned_bss; pgd_t trampoline_pg_dir[PTRS_PER_PGD] __page_aligned_bss; pte_t fixmap_pte[PTRS_PER_PTE] __page_aligned_bss; -#define MAX_EARLY_MAPPING_SIZE SZ_128M -pgd_t early_pg_dir[PTRS_PER_PGD ]__initdata __aligned(PAGE_SIZE) ;void __set_fixmap (enum fixed_addresses idx,phys_addr_t phys,pgprot_t prot)
@@ -298,13 +296,7 @@ static void __init create_pte_mapping(pte_t *ptep, pmd_t trampoline_pmd[PTRS_PER_PMD] __page_aligned_bss; pmd_t fixmap_pmd[PTRS_PER_PMD] __page_aligned_bss; - -#if MAX_EARLY_MAPPING_SIZE <PGDIR_SIZE -#define NUM_EARLY_PMDS 1UL -#else -#define NUM_EARLY_PMDS (1UL + MAX_EARLY_MAPPING_SIZE / PGDIR_SIZE) -#endif -pmd_t early_pmd[PTRS_PER_PMD *NUM_EARLY_PMDS ]__initdata __aligned(PAGE_SIZE) ; +pmd_t early_pmd[PTRS_PER_PMD ]__initdata __aligned(PAGE_SIZE) ;pmd_t early_dtb_pmd[PTRS_PER_PMD ]__initdata __aligned(PAGE_SIZE) ;static pmd_t *__init get_pmd_virt_early (phys_addr_t pa)
@@ -326,11 +318,9 @@ static pmd_t *get_pmd_virt_late(phys_addr_t pa)static phys_addr_t __init alloc_pmd_early (uintptr_t va) { -uintptr_t pmd_num; +BUG_ON ((va -PAGE_OFFSET ) >>PGDIR_SHIFT ); - pmd_num = (va -PAGE_OFFSET ) >>PGDIR_SHIFT ; -BUG_ON (pmd_num >=NUM_EARLY_PMDS ); -return (uintptr_t )&early_pmd[pmd_num *PTRS_PER_PMD ]; +return (uintptr_t )early_pmd; }static phys_addr_t __init alloc_pmd_fixmap (uintptr_t va)
@@ -448,7 +438,7 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)uintptr_t va, pa, end_va;uintptr_t load_pa = (uintptr_t )(&_start);uintptr_t load_sz = (uintptr_t )(&_end) - load_pa; -uintptr_t map_size =best_map_size (load_pa,MAX_EARLY_MAPPING_SIZE ); +uintptr_t map_size;#ifndef __PAGETABLE_PMD_FOLDEDpmd_t fix_bmap_spmd, fix_bmap_epmd;#endif
@@ -460,12 +450,11 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa)* Enforce boot alignment requirements of RV32 and * RV64 by only allowing PMD or PGD mappings. */ -BUG_ON (map_size ==PAGE_SIZE ); + map_size =PMD_SIZE ;/* Sanity check alignment and size */ BUG_ON ((PAGE_OFFSET %PGDIR_SIZE ) !=0 );BUG_ON ((load_pa % map_size) !=0 ); -BUG_ON (load_sz >MAX_EARLY_MAPPING_SIZE ); pt_ops.alloc_pte = alloc_pte_early; pt_ops.get_pte_virt = get_pte_virt_early;
arch/x86/events/intel/core.c +3 -0
@@ -4384,6 +4384,9 @@ static const struct x86_cpu_desc isolation_ucodes[] = {INTEL_CPU_DESC (INTEL_FAM6_BROADWELL_X ,2 ,0x0b000014 ),INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE_X ,3 ,0x00000021 ),INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE_X ,4 ,0x00000000 ), +INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE_X ,5 ,0x00000000 ), +INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE_X ,6 ,0x00000000 ), +INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE_X ,7 ,0x00000000 ),INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE_L ,3 ,0x0000007c ),INTEL_CPU_DESC (INTEL_FAM6_SKYLAKE ,3 ,0x0000007c ), INTEL_CPU_DESC(INTEL_FAM6_KABYLAKE, 9, 0x0000004e),
arch/x86/include/asm/xen/page.h +12 -0
@@ -86,6 +86,18 @@ clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops, }#endif +/* +* The maximum amount of extra memory compared to the base size. The +* main scaling factor is the size of struct page. At extreme ratios +* of base:extra, all the base memory can be filled with page +* structures for the extra memory, leaving no space for anything +* else. +* +* 10x seems like a reasonable balance between scaling flexibility and +* leaving a practically usable system. +*/ +#define XEN_EXTRA_MEM_RATIO (10) +/* * Helper functions to write or read unsigned long values to/from * memory, when the access may fault.
arch/x86/kernel/module.c +1 -0
@@ -114,6 +114,7 @@ int apply_relocate(Elf32_Shdr *sechdrs, *location += sym->st_value;break ;case R_386_PC32 : +case R_386_PLT32 :/* Add the value, subtract its position */ *location += sym->st_value - (uint32_t )location;break ;
arch/x86/kernel/reboot.c +9 -0
@@ -477,6 +477,15 @@ static const struct dmi_system_id reboot_dmi_table[] __initconst = { }, }, + {/* PCIe Wifi card isn't detected after reboot otherwise */ + .callback = set_pci_reboot, + .ident = "Zotac ZBOX CI327 nano", + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"NA" ), + DMI_MATCH(DMI_PRODUCT_NAME, "ZBOX-CI327NANO-GS-01"), + }, + }, + /* Sony */ { /* Handle problems with rebooting on Sony VGN-Z540N */ .callback = set_bios_reboot,
arch/x86/tools/relocs.c +8 -4
@@ -867,9 +867,11 @@ static int do_reloc32(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,case R_386_PC32 :case R_386_PC16 :case R_386_PC8 : +case R_386_PLT32 :/* -* NONE can be ignored and PC relative relocations don't -* need to be adjusted. +* NONE can be ignored and PC relative relocations don't need +* to be adjusted. Because sym must be defined, R_386_PLT32 can +* be treated the same way as R_386_PC32. */ break ;
@@ -910,9 +912,11 @@ static int do_reloc_real(struct section *sec, Elf_Rel *rel, Elf_Sym *sym,case R_386_PC32 :case R_386_PC16 :case R_386_PC8 : +case R_386_PLT32 :/* -* NONE can be ignored and PC relative relocations don't -* need to be adjusted. +* NONE can be ignored and PC relative relocations don't need +* to be adjusted. Because sym must be defined, R_386_PLT32 can +* be treated the same way as R_386_PC32. */ break ;
arch/x86/xen/p2m.c +47 -7
79 lines not on this page · raw message
arch/x86/xen/setup.c +3 -22
@@ -59,18 +59,6 @@ static struct { } xen_remap_buf__initdata __aligned(PAGE_SIZE) ;static unsigned long xen_remap_mfn__initdata =INVALID_P2M_ENTRY ; -/* -* The maximum amount of extra memory compared to the base size. The -* main scaling factor is the size of struct page. At extreme ratios -* of base:extra, all the base memory can be filled with page -* structures for the extra memory, leaving no space for anything -* else. -* -* 10x seems like a reasonable balance between scaling flexibility and -* leaving a practically usable system. -*/ -#define EXTRA_MEM_RATIO (10) -static bool xen_512gb_limit__initdata =IS_ENABLED (CONFIG_XEN_512GB );static void __init xen_parse_512gb (void )
@@ -790,20 +778,13 @@ char * __init xen_memory_setup(void) extra_pages += max_pages - max_pfn;/* -* Clamp the amount of extra memory to a EXTRA_MEM_RATIO -* factor the base size. On non-highmem systems, the base -* size is the full initial memory allocation; on highmem it -* is limited to the max size of lowmem, so that it doesn't -* get completely filled. +* Clamp the amount of extra memory to a XEN_EXTRA_MEM_RATIO +* factor the base size. * * Make sure we have no memory above max_pages, as this area * isn't handled by the p2m management. -* -* In principle there could be a problem in lowmem systems if -* the initial memory is also very large with respect to -* lowmem, but we won't try to deal with that here. */ - extra_pages =min3 (EXTRA_MEM_RATIO *min (max_pfn,PFN_DOWN (MAXMEM )), + extra_pages =min3 (XEN_EXTRA_MEM_RATIO *min (max_pfn,PFN_DOWN (MAXMEM )), extra_pages, max_pages - max_pfn); i =0 ; addr = xen_e820_table.entries[0 ].addr;
crypto/tcrypt.c +10 -10
@@ -199,8 +199,8 @@ static int test_mb_aead_jiffies(struct test_mb_aead_data *data, int enc, goto out; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount * num_mb, secs, (long )bcount * blen * num_mb); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount * num_mb, secs, (u64 )bcount * blen * num_mb); out:kfree (rc);
@@ -469,8 +469,8 @@ static int test_aead_jiffies(struct aead_request *req, int enc,return ret; } -printk ("%d operations in %d seconds (%ld bytes)\n" , - bcount, secs, (long )bcount * blen); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount, secs, (u64 )bcount * blen);return 0 ; }
@@ -760,8 +760,8 @@ static int test_mb_ahash_jiffies(struct test_mb_ahash_data *data, int blen, goto out; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount * num_mb, secs, (long )bcount * blen * num_mb); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount * num_mb, secs, (u64 )bcount * blen * num_mb); out:kfree (rc);
@@ -1197,8 +1197,8 @@ static int test_mb_acipher_jiffies(struct test_mb_skcipher_data *data, int enc, goto out; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount * num_mb, secs, (long )bcount * blen * num_mb); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount * num_mb, secs, (u64 )bcount * blen * num_mb); out:kfree (rc);
@@ -1435,8 +1435,8 @@ static int test_acipher_jiffies(struct skcipher_request *req, int enc,return ret; } -pr_cont ("%d operations in %d seconds (%ld bytes)\n" , - bcount, secs, (long )bcount * blen); +pr_cont ("%d operations in %d seconds (%llu bytes)\n" , + bcount, secs, (u64 )bcount * blen);return 0 ; }
drivers/block/nbd.c +19 -13
@@ -78,8 +78,7 @@ struct link_dead_args {#define NBD_RT_HAS_PID_FILE 3#define NBD_RT_HAS_CONFIG_REF 4#define NBD_RT_BOUND 5 -#define NBD_RT_DESTROY_ON_DISCONNECT 6 -#define NBD_RT_DISCONNECT_ON_CLOSE 7 +#define NBD_RT_DISCONNECT_ON_CLOSE 6#define NBD_DESTROY_ON_DISCONNECT 0#define NBD_DISCONNECT_REQUESTED 1
@@ -1955,12 +1954,21 @@ static int nbd_genl_connect(struct sk_buff *skb, struct genl_info *info)if (info->attrs[NBD_ATTR_CLIENT_FLAGS ]) {u64 flags =nla_get_u64 (info->attrs[NBD_ATTR_CLIENT_FLAGS ]);if (flags &NBD_CFLAG_DESTROY_ON_DISCONNECT ) { -set_bit (NBD_RT_DESTROY_ON_DISCONNECT , - &config->runtime_flags); -set_bit (NBD_DESTROY_ON_DISCONNECT , &nbd->flags); - put_dev = true; +/* +* We have 1 ref to keep the device around, and then 1 +* ref for our current operation here, which will be +* inherited by the config. If we already have +* DESTROY_ON_DISCONNECT set then we know we don't have +* that extra ref already held so we don't need the +* put_dev. +*/ +if (!test_and_set_bit (NBD_DESTROY_ON_DISCONNECT , + &nbd->flags)) + put_dev = true; }else { -clear_bit (NBD_DESTROY_ON_DISCONNECT , &nbd->flags); +if (test_and_clear_bit (NBD_DESTROY_ON_DISCONNECT , + &nbd->flags)) +refcount_inc (&nbd->refs); }if (flags &NBD_CFLAG_DISCONNECT_ON_CLOSE ) { set_bit(NBD_RT_DISCONNECT_ON_CLOSE,
@@ -2131,15 +2139,13 @@ static int nbd_genl_reconfigure(struct sk_buff *skb, struct genl_info *info)if (info->attrs[NBD_ATTR_CLIENT_FLAGS ]) {u64 flags =nla_get_u64 (info->attrs[NBD_ATTR_CLIENT_FLAGS ]);if (flags &NBD_CFLAG_DESTROY_ON_DISCONNECT ) { -if (!test_and_set_bit (NBD_RT_DESTROY_ON_DISCONNECT , - &config->runtime_flags)) +if (!test_and_set_bit (NBD_DESTROY_ON_DISCONNECT , + &nbd->flags)) put_dev = true; -set_bit (NBD_DESTROY_ON_DISCONNECT , &nbd->flags); }else { -if (test_and_clear_bit (NBD_RT_DESTROY_ON_DISCONNECT , - &config->runtime_flags)) +if (test_and_clear_bit (NBD_DESTROY_ON_DISCONNECT , + &nbd->flags))refcount_inc (&nbd->refs); -clear_bit (NBD_DESTROY_ON_DISCONNECT , &nbd->flags); }if (flags &NBD_CFLAG_DISCONNECT_ON_CLOSE ) {
drivers/block/zram/zram_drv.c +1 -1
@@ -1078,7 +1078,7 @@ static ssize_t mm_stat_show(struct device *dev, zram->limit_pages <<PAGE_SHIFT , max_used <<PAGE_SHIFT , (u64 )atomic64_read (&zram->stats.same_pages), - pool_stats.pages_compacted, +atomic_long_read (&pool_stats.pages_compacted), (u64)atomic64_read(&zram->stats.huge_pages));up_read (&zram->init_lock);
drivers/bluetooth/hci_h5.c +5 -0
@@ -906,6 +906,11 @@ static int h5_btrtl_setup(struct h5 *h5)/* Give the device some time before the hci-core sends it a reset */ usleep_range (10000 ,20000 ); +/* Enable controller to do both LE scan and BR/EDR inquiry +* simultaneously. +*/ +set_bit (HCI_QUIRK_SIMULTANEOUS_DISCOVERY , &h5->hu->hdev->quirks); + out_free:btrtl_free (btrtl_dev);
drivers/edac/amd64_edac.c +7 -3
@@ -3350,10 +3350,13 @@ static struct amd64_family_type *per_family_init(struct amd64_pvt *pvt) fam_type = &family_types[F15_M60H_CPUS ]; pvt->ops = &family_types[F15_M60H_CPUS ].ops;break ; +/* Richland is only client */ + }else if (pvt->model ==0x13 ) { +return NULL ; + }else { + fam_type = &family_types[F15_CPUS ]; + pvt->ops = &family_types[F15_CPUS ].ops; } - - fam_type = &family_types[F15_CPUS ]; - pvt->ops = &family_types[F15_CPUS ].ops;break ;case 0x16 :
@@ -3547,6 +3550,7 @@ static int probe_one_instance(unsigned int nid) pvt->mc_node_id = nid; pvt->F3 =F3 ; + ret = -ENODEV ; fam_type =per_family_init (pvt);if (!fam_type) goto err_enable;
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +5 -1
@@ -558,10 +558,14 @@ static int amdgpu_virt_write_vf2pf_data(struct amdgpu_device *adev)void amdgpu_virt_update_vf2pf_work_item (struct work_struct *work) { struct amdgpu_device *adev = container_of(work, struct amdgpu_device, virt.vf2pf_work.work); +int ret; -amdgpu_virt_read_pf2vf_data (adev); + ret =amdgpu_virt_read_pf2vf_data (adev); +if (ret) + goto out;amdgpu_virt_write_vf2pf_data (adev); +out:schedule_delayed_work (&(adev->virt.vf2pf_work), adev->virt.vf2pf_update_interval_ms); }
drivers/gpu/drm/amd/amdgpu/cz_ih.c +24 -13
@@ -193,19 +193,30 @@ static u32 cz_ih_get_wptr(struct amdgpu_device *adev, wptr =le32_to_cpu (*ih->wptr_cpu); -if (REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) { - wptr =REG_SET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW ,0 ); -/* When a ring buffer overflow happen start parsing interrupt -* from the last not overwritten vector (wptr + 16). Hopefully -* this should allow us to catchup. -*/ -dev_warn (adev->dev,"IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n" , - wptr, ih->rptr, (wptr +16 ) & ih->ptr_mask); - ih->rptr = (wptr +16 ) & ih->ptr_mask; - tmp =RREG32 (mmIH_RB_CNTL); - tmp =REG_SET_FIELD (tmp,IH_RB_CNTL ,WPTR_OVERFLOW_CLEAR ,1 ); -WREG32 (mmIH_RB_CNTL, tmp); - } +if (!REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) + goto out; + +/* Double check that the overflow wasn't already cleared. */ + wptr =RREG32 (mmIH_RB_WPTR); + +if (!REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) + goto out; + + wptr =REG_SET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW ,0 ); + +/* When a ring buffer overflow happen start parsing interrupt +* from the last not overwritten vector (wptr + 16). Hopefully +* this should allow us to catchup. +*/ +dev_warn (adev->dev,"IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n" , + wptr, ih->rptr, (wptr +16 ) & ih->ptr_mask); + ih->rptr = (wptr +16 ) & ih->ptr_mask; + tmp =RREG32 (mmIH_RB_CNTL); + tmp =REG_SET_FIELD (tmp,IH_RB_CNTL ,WPTR_OVERFLOW_CLEAR ,1 ); +WREG32 (mmIH_RB_CNTL, tmp); + + +out:return (wptr & ih->ptr_mask); }
drivers/gpu/drm/amd/amdgpu/iceland_ih.c +23 -13
@@ -193,19 +193,29 @@ static u32 iceland_ih_get_wptr(struct amdgpu_device *adev, wptr =le32_to_cpu (*ih->wptr_cpu); -if (REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) { - wptr =REG_SET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW ,0 ); -/* When a ring buffer overflow happen start parsing interrupt -* from the last not overwritten vector (wptr + 16). Hopefully -* this should allow us to catchup. -*/ -dev_warn (adev->dev,"IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n" , - wptr, ih->rptr, (wptr +16 ) & ih->ptr_mask); - ih->rptr = (wptr +16 ) & ih->ptr_mask; - tmp =RREG32 (mmIH_RB_CNTL); - tmp =REG_SET_FIELD (tmp,IH_RB_CNTL ,WPTR_OVERFLOW_CLEAR ,1 ); -WREG32 (mmIH_RB_CNTL, tmp); - } +if (!REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) + goto out; + +/* Double check that the overflow wasn't already cleared. */ + wptr =RREG32 (mmIH_RB_WPTR); + +if (!REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) + goto out; + + wptr =REG_SET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW ,0 ); +/* When a ring buffer overflow happen start parsing interrupt +* from the last not overwritten vector (wptr + 16). Hopefully +* this should allow us to catchup. +*/ +dev_warn (adev->dev,"IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n" , + wptr, ih->rptr, (wptr +16 ) & ih->ptr_mask); + ih->rptr = (wptr +16 ) & ih->ptr_mask; + tmp =RREG32 (mmIH_RB_CNTL); + tmp =REG_SET_FIELD (tmp,IH_RB_CNTL ,WPTR_OVERFLOW_CLEAR ,1 ); +WREG32 (mmIH_RB_CNTL, tmp); + + +out:return (wptr & ih->ptr_mask); }
drivers/gpu/drm/amd/amdgpu/tonga_ih.c +24 -13
@@ -195,19 +195,30 @@ static u32 tonga_ih_get_wptr(struct amdgpu_device *adev, wptr =le32_to_cpu (*ih->wptr_cpu); -if (REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) { - wptr =REG_SET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW ,0 ); -/* When a ring buffer overflow happen start parsing interrupt -* from the last not overwritten vector (wptr + 16). Hopefully -* this should allow us to catchup. -*/ -dev_warn (adev->dev,"IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n" , - wptr, ih->rptr, (wptr +16 ) & ih->ptr_mask); - ih->rptr = (wptr +16 ) & ih->ptr_mask; - tmp =RREG32 (mmIH_RB_CNTL); - tmp =REG_SET_FIELD (tmp,IH_RB_CNTL ,WPTR_OVERFLOW_CLEAR ,1 ); -WREG32 (mmIH_RB_CNTL, tmp); - } +if (!REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) + goto out; + +/* Double check that the overflow wasn't already cleared. */ + wptr =RREG32 (mmIH_RB_WPTR); + +if (!REG_GET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW )) + goto out; + + wptr =REG_SET_FIELD (wptr,IH_RB_WPTR ,RB_OVERFLOW ,0 ); + +/* When a ring buffer overflow happen start parsing interrupt +* from the last not overwritten vector (wptr + 16). Hopefully +* this should allow us to catchup. +*/ + +dev_warn (adev->dev,"IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n" , + wptr, ih->rptr, (wptr +16 ) & ih->ptr_mask); + ih->rptr = (wptr +16 ) & ih->ptr_mask; + tmp =RREG32 (mmIH_RB_CNTL); + tmp =REG_SET_FIELD (tmp,IH_RB_CNTL ,WPTR_OVERFLOW_CLEAR ,1 ); +WREG32 (mmIH_RB_CNTL, tmp); + +out:return (wptr & ih->ptr_mask); }
drivers/gpu/drm/amd/display/dc/core/dc_link.c +5 -0
@@ -1454,6 +1454,11 @@ static bool dc_link_construct(struct dc_link *link, goto ddc_create_fail; } +if (!link->ddc->ddc_pin) { +DC_ERROR ("Failed to get I2C info for connector!\n" ); + goto ddc_create_fail; + } + link->ddc_hw_inst =dal_ddc_get_line (dal_ddc_service_get_ddc_pin (link->ddc));
drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_drv.c +0 -1
@@ -368,7 +368,6 @@ static void hibmc_pci_remove(struct pci_dev *pdev)drm_dev_unregister (dev);hibmc_unload (dev); -drm_dev_put (dev); }static struct pci_device_id hibmc_pci_table[] = {
drivers/gpu/drm/virtio/virtgpu_object.c +3 -2
@@ -172,8 +172,9 @@ static int virtio_gpu_object_shmem_init(struct virtio_gpu_device *vgdev, *nents = shmem->pages->orig_nents; } - *ents =kmalloc_array (*nents,sizeof (struct virtio_gpu_mem_entry ), -GFP_KERNEL ); + *ents =kvmalloc_array (*nents, +sizeof (struct virtio_gpu_mem_entry ), +GFP_KERNEL );if (!(*ents)) {DRM_ERROR ("failed to allocate ent list\n" );return -ENOMEM ;
drivers/infiniband/ulp/rtrs/rtrs-clt.c +7 -8
@@ -502,7 +502,7 @@ static void rtrs_clt_recv_done(struct rtrs_clt_con *con, struct ib_wc *wc)int err;struct rtrs_clt_sess *sess =to_clt_sess (con->c.sess); -WARN_ON (sess->flags !=RTRS_MSG_NEW_RKEY_F ); +WARN_ON ((sess->flags &RTRS_MSG_NEW_RKEY_F ) ==0 ); iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe); err =rtrs_iu_post_recv (&con->c, iu);
@@ -522,7 +522,7 @@ static void rtrs_clt_rkey_rsp_done(struct rtrs_clt_con *con, struct ib_wc *wc)u32 buf_id;int err; -WARN_ON (sess->flags !=RTRS_MSG_NEW_RKEY_F ); +WARN_ON ((sess->flags &RTRS_MSG_NEW_RKEY_F ) ==0 ); iu = container_of(wc->wr_cqe, struct rtrs_iu, cqe);
@@ -629,12 +629,12 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc) }else if (imm_type ==RTRS_HB_MSG_IMM ) {WARN_ON (con->c.cid);rtrs_send_hb_ack (&sess->s); -if (sess->flags ==RTRS_MSG_NEW_RKEY_F ) +if (sess->flags &RTRS_MSG_NEW_RKEY_F )return rtrs_clt_recv_done (con, wc); }else if (imm_type ==RTRS_HB_ACK_IMM ) {WARN_ON (con->c.cid); sess->s.hb_missed_cnt =0 ; -if (sess->flags ==RTRS_MSG_NEW_RKEY_F ) +if (sess->flags &RTRS_MSG_NEW_RKEY_F )return rtrs_clt_recv_done (con, wc); }else { rtrs_wrn(con->c.sess, "Unknown IMM type %u\n",
@@ -662,7 +662,7 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc)WARN_ON (!(wc->wc_flags &IB_WC_WITH_INVALIDATE || wc->wc_flags &IB_WC_WITH_IMM ));WARN_ON (wc->wr_cqe->done != rtrs_clt_rdma_done); -if (sess->flags ==RTRS_MSG_NEW_RKEY_F ) { +if (sess->flags &RTRS_MSG_NEW_RKEY_F ) {if (wc->wc_flags &IB_WC_WITH_INVALIDATE )return rtrs_clt_recv_done (con, wc);
@@ -672,7 +672,6 @@ static void rtrs_clt_rdma_done(struct ib_cq *cq, struct ib_wc *wc)case IB_WC_RDMA_WRITE :/* * post_send() RDMA write completions of IO reqs (read/write) -* and hb */ break ;
@@ -688,7 +687,7 @@ static int post_recv_io(struct rtrs_clt_con *con, size_t q_size)struct rtrs_clt_sess *sess =to_clt_sess (con->c.sess);for (i =0 ; i < q_size; i++) { -if (sess->flags ==RTRS_MSG_NEW_RKEY_F ) { +if (sess->flags &RTRS_MSG_NEW_RKEY_F ) {struct rtrs_iu *iu = &con->rsp_ius[i]; err =rtrs_iu_post_recv (&con->c, iu);
@@ -1580,7 +1579,7 @@ static int create_con_cq_qp(struct rtrs_clt_con *con) sess->queue_depth * 3 + 1); }/* alloc iu to recv new rkey reply when server reports flags set */ -if (sess->flags ==RTRS_MSG_NEW_RKEY_F || con->c.cid ==0 ) { +if (sess->flags &RTRS_MSG_NEW_RKEY_F || con->c.cid ==0 ) { con->rsp_ius = rtrs_iu_alloc(max_recv_wr, sizeof(*rsp), GFP_KERNEL, sess->s.dev->ib_dev, DMA_FROM_DEVICE,
drivers/infiniband/ulp/rtrs/rtrs-srv.c +1 -2
@@ -836,7 +836,7 @@ static int process_info_req(struct rtrs_srv_con *con, rwr[mri].wr.opcode =IB_WR_REG_MR ; rwr[mri].wr.wr_cqe = &local_reg_cqe; rwr[mri].wr.num_sge =0 ; - rwr[mri].wr.send_flags = mri ?0 :IB_SEND_SIGNALED ; + rwr[mri].wr.send_flags =0 ; rwr[mri].mr = mr; rwr[mri].key = mr->rkey; rwr[mri].access = (IB_ACCESS_LOCAL_WRITE |
@@ -1260,7 +1260,6 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc)case IB_WC_SEND :/* * post_send() RDMA write completions of IO reqs (read/write) -* and hb */ atomic_add (srv->queue_depth, &con->sq_wr_avail);
drivers/infiniband/ulp/rtrs/rtrs.c +2 -2
@@ -325,7 +325,7 @@ void rtrs_send_hb_ack(struct rtrs_sess *sess) imm =rtrs_to_imm (RTRS_HB_ACK_IMM ,0 ); err =rtrs_post_rdma_write_imm_empty (usr_con, sess->hb_cqe, imm, -IB_SEND_SIGNALED ,NULL ); +0 ,NULL );if (err) { sess->hb_err_handler (usr_con);return ;
@@ -354,7 +354,7 @@ static void hb_work(struct work_struct *work) } imm =rtrs_to_imm (RTRS_HB_MSG_IMM ,0 ); err =rtrs_post_rdma_write_imm_empty (usr_con, sess->hb_cqe, imm, -IB_SEND_SIGNALED ,NULL ); +0 ,NULL );if (err) { sess->hb_err_handler (usr_con);return ;
drivers/input/mouse/elan_i2c.h +16 -0
@@ -28,6 +28,22 @@#define ETP_FEATURE_REPORT_MK BIT(0) +#define ETP_REPORT_ID 0x5D +#define ETP_TP_REPORT_ID 0x5E +#define ETP_TP_REPORT_ID2 0x5F +#define ETP_REPORT_ID2 0x60/* High precision report */ + +#define ETP_REPORT_ID_OFFSET 2 +#define ETP_TOUCH_INFO_OFFSET 3 +#define ETP_FINGER_DATA_OFFSET 4 +#define ETP_HOVER_INFO_OFFSET 30 +#define ETP_MK_DATA_OFFSET 33/* For high precision reports */ + +#define ETP_MAX_REPORT_LEN 39 + +#define ETP_MAX_FINGERS 5 +#define ETP_FINGER_DATA_LEN 5 +/* IAP Firmware handling */ #define ETP_PRODUCT_ID_FORMAT_STRING "%d.0"#define ETP_FW_NAME "elan_i2c_" ETP_PRODUCT_ID_FORMAT_STRING ".bin"
drivers/input/mouse/elan_i2c_core.c +1 -12
@@ -47,18 +47,6 @@#define ETP_FINGER_WIDTH 15#define ETP_RETRY_COUNT 3 -#define ETP_MAX_FINGERS 5 -#define ETP_FINGER_DATA_LEN 5 -#define ETP_REPORT_ID 0x5D -#define ETP_REPORT_ID2 0x60/* High precision report */ -#define ETP_TP_REPORT_ID 0x5E -#define ETP_REPORT_ID_OFFSET 2 -#define ETP_TOUCH_INFO_OFFSET 3 -#define ETP_FINGER_DATA_OFFSET 4 -#define ETP_HOVER_INFO_OFFSET 30 -#define ETP_MK_DATA_OFFSET 33/* For high precision reports */ -#define ETP_MAX_REPORT_LEN 39 -/* The main device structure */ struct elan_tp_data {struct i2c_client *client;
@@ -1076,6 +1064,7 @@ static irqreturn_t elan_isr(int irq, void *dev_id)elan_report_absolute (data, report, true);break ;case ETP_TP_REPORT_ID : +case ETP_TP_REPORT_ID2 :elan_report_trackpoint (data, report);break ;default :
drivers/input/mouse/elan_i2c_smbus.c +6 -2
@@ -45,6 +45,7 @@#define ETP_SMBUS_CALIBRATE_QUERY 0xC5#define ETP_SMBUS_REPORT_LEN 32 +#define ETP_SMBUS_REPORT_LEN2 7#define ETP_SMBUS_REPORT_OFFSET 2#define ETP_SMBUS_HELLOPACKET_LEN 5#define ETP_SMBUS_IAP_PASSWORD 0x1234
@@ -497,10 +498,13 @@ static int elan_smbus_get_report(struct i2c_client *client,return len; } -if (len !=ETP_SMBUS_REPORT_LEN ) { +if (report[ETP_REPORT_ID_OFFSET ] ==ETP_TP_REPORT_ID2 ) + report_len =ETP_SMBUS_REPORT_LEN2 ; + +if (len != report_len) {dev_err (&client->dev,"wrong report length (%d vs %d expected)\n" , - len,ETP_SMBUS_REPORT_LEN ); + len, report_len);return -EIO ; }
drivers/input/mouse/elantech.c +97 -2
146 lines not on this page · raw message
drivers/input/mouse/elantech.h +4 -0
@@ -18,6 +18,7 @@#define ETP_CAPABILITIES_QUERY 0x02#define ETP_SAMPLE_QUERY 0x03#define ETP_RESOLUTION_QUERY 0x04 +#define ETP_ICBODY_QUERY 0x05/* * Command values for register reading or writing
@@ -140,7 +141,10 @@ struct elantech_device_info {unsigned char samples[3 ];unsigned char debug;unsigned char hw_version; +unsigned char pattern;unsigned int fw_version; +unsigned int ic_version; +unsigned int product_id;unsigned int x_min;unsigned int y_min;unsigned int x_max;
drivers/media/rc/mceusb.c +8 -1
@@ -701,11 +701,18 @@ static void mceusb_dev_printdata(struct mceusb_dev *ir, u8 *buf, int buf_len, data[0], data[1]);break ;case MCE_RSP_EQIRCFS : +if (!data[0 ] && !data[1 ]) { +dev_dbg (dev,"%s: no carrier" , inout); +break ; + } +// prescaler should make sense +if (data[0 ] >8 ) +break ; period =DIV_ROUND_CLOSEST ((1U << data[0 ] *2 ) * (data[1 ] +1 ),10 );if (!period)break ; - carrier = (1000 *1000 ) / period; + carrier =USEC_PER_SEC / period;dev_dbg (dev,"%s carrier of %u Hz (period %uus)" , inout, carrier, period);break ;
drivers/media/usb/uvc/uvc_driver.c +5 -2
@@ -1028,7 +1028,10 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,unsigned int i; extra_size =roundup (extra_size,sizeof (*entity->pads)); - num_inputs = (type &UVC_TERM_OUTPUT ) ? num_pads : num_pads -1 ; +if (num_pads) + num_inputs = type &UVC_TERM_OUTPUT ? num_pads : num_pads -1 ; +else + num_inputs =0 ; size =sizeof (*entity) + extra_size +sizeof (*entity->pads) * num_pads + num_inputs; entity =kzalloc (size,GFP_KERNEL );
@@ -1044,7 +1047,7 @@ static struct uvc_entity *uvc_alloc_entity(u16 type, u8 id,for (i =0 ; i < num_inputs; ++i) entity->pads[i].flags =MEDIA_PAD_FL_SINK ; -if (!UVC_ENTITY_IS_OTERM (entity)) +if (!UVC_ENTITY_IS_OTERM (entity) && num_pads) entity->pads[num_pads-1 ].flags =MEDIA_PAD_FL_SOURCE ; entity->bNrInPins = num_inputs;
drivers/media/v4l2-core/v4l2-ctrls.c +2 -1
@@ -1987,7 +1987,8 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_INTEGER_MENU :if (ptr.p_s32[idx] < ctrl->minimum || ptr.p_s32[idx] > ctrl->maximum)return -ERANGE ; -if (ctrl->menu_skip_mask & (1ULL << ptr.p_s32[idx])) +if (ptr.p_s32[idx] <BITS_PER_LONG_LONG && + (ctrl->menu_skip_mask &BIT_ULL (ptr.p_s32[idx])))return -EINVAL ;if (ctrl->type ==V4L2_CTRL_TYPE_MENU && ctrl->qmenu[ptr.p_s32[idx]][0 ] =='\0' )
drivers/media/v4l2-core/v4l2-ioctl.c +7 -12
@@ -3251,7 +3251,7 @@ video_usercopy(struct file *file, unsigned int orig_cmd, unsigned long arg, v4l2_kioctl func) {char sbuf[128 ]; -void *mbuf =NULL ; +void *mbuf =NULL , *array_buf =NULL ;void *parg = (void *)arg;long err = -EINVAL ;bool has_array_args;
@@ -3286,20 +3286,14 @@ video_usercopy(struct file *file, unsigned int orig_cmd, unsigned long arg, has_array_args = err;if (has_array_args) { -/* -* When adding new types of array args, make sure that the -* parent argument to ioctl (which contains the pointer to the -* array) fits into sbuf (so that mbuf will still remain -* unused up to here). -*/ - mbuf =kvmalloc (array_size,GFP_KERNEL ); + array_buf =kvmalloc (array_size,GFP_KERNEL ); err = -ENOMEM ; -if (NULL == mbuf) +if (array_buf ==NULL ) goto out_array_args; err = -EFAULT ; -if (copy_from_user (mbuf, user_ptr, array_size)) +if (copy_from_user (array_buf, user_ptr, array_size)) goto out_array_args; - *kernel_ptr = mbuf; + *kernel_ptr = array_buf; }/* Handles IOCTL */
@@ -3318,7 +3312,7 @@ video_usercopy(struct file *file, unsigned int orig_cmd, unsigned long arg,if (has_array_args) { *kernel_ptr = (void __force *)user_ptr; -if (copy_to_user (user_ptr, mbuf, array_size)) +if (copy_to_user (user_ptr, array_buf, array_size)) err = -EFAULT ; goto out_array_args; }
@@ -3333,6 +3327,7 @@ video_usercopy(struct file *file, unsigned int orig_cmd, unsigned long arg,if (video_put_user ((void __user *)arg, parg, orig_cmd)) err = -EFAULT ; out: +kvfree (array_buf);kvfree (mbuf);return err; }
drivers/net/ethernet/atheros/ag71xx.c +1 -3
@@ -223,8 +223,6 @@#define AG71XX_REG_RX_SM 0x01b0#define AG71XX_REG_TX_SM 0x01b4 -#define ETH_SWITCH_HEADER_LEN 2 -#define AG71XX_DEFAULT_MSG_ENABLE \ (NETIF_MSG_DRV \ | NETIF_MSG_PROBE \
@@ -933,7 +931,7 @@ static void ag71xx_hw_setup(struct ag71xx *ag)static unsigned int ag71xx_max_frame_len (unsigned int mtu) { -return ETH_SWITCH_HEADER_LEN +ETH_HLEN +VLAN_HLEN + mtu +ETH_FCS_LEN ; +return ETH_HLEN +VLAN_HLEN + mtu +ETH_FCS_LEN ; }static void ag71xx_hw_set_macaddr (struct ag71xx *ag,unsigned char *mac)
drivers/net/phy/sfp-bus.c +15 -0
@@ -44,6 +44,17 @@ static void sfp_quirk_2500basex(const struct sfp_eeprom_id *id, phylink_set(modes, 2500baseX_Full); } +static void sfp_quirk_ubnt_uf_instant (const struct sfp_eeprom_id *id, +unsigned long *modes) +{ +/* Ubiquiti U-Fiber Instant module claims that support all transceiver +* types including 10G Ethernet which is not truth. So clear all claimed +* modes and set only one mode which module supports: 1000baseX_Full. +*/ +phylink_zero (modes); + phylink_set(modes, 1000baseX_Full); +} +static const struct sfp_quirk sfp_quirks[] = { {// Alcatel Lucent G-010S-P can operate at 2500base-X, but
@@ -63,6 +74,10 @@ static const struct sfp_quirk sfp_quirks[] = { .vendor = "HUAWEI", .part = "MA5671A", .modes = sfp_quirk_2500basex, + }, { + .vendor = "UBNT", + .part = "UF-INSTANT", + .modes = sfp_quirk_ubnt_uf_instant, }, };
drivers/net/phy/sfp.c +106 -6
170 lines not on this page · raw message
drivers/net/tap.c +3 -4
@@ -1093,10 +1093,9 @@ static long tap_ioctl(struct file *file, unsigned int cmd,return -ENOLINK ; } ret =0 ; - u = tap->dev->type; +dev_get_mac_address (&sa,dev_net (tap->dev), tap->dev->name);if (copy_to_user (&ifr->ifr_name, tap->dev->name,IFNAMSIZ ) || -copy_to_user (&ifr->ifr_hwaddr.sa_data, tap->dev->dev_addr,ETH_ALEN ) || -put_user (u, &ifr->ifr_hwaddr.sa_family)) +copy_to_user (&ifr->ifr_hwaddr, &sa,sizeof (sa))) ret = -EFAULT ;tap_put_tap_dev (tap);rtnl_unlock ();
@@ -1111,7 +1110,7 @@ static long tap_ioctl(struct file *file, unsigned int cmd,rtnl_unlock ();return -ENOLINK ; } - ret =dev_set_mac_address (tap->dev, &sa,NULL ); + ret =dev_set_mac_address_user (tap->dev, &sa,NULL );tap_put_tap_dev (tap);rtnl_unlock ();return ret;
drivers/net/tun.c +2 -3
@@ -3157,15 +3157,14 @@ static long __tun_chr_ioctl(struct file *file, unsigned int cmd,case SIOCGIFHWADDR :/* Get hw address */ -memcpy (ifr.ifr_hwaddr.sa_data, tun->dev->dev_addr,ETH_ALEN ); - ifr.ifr_hwaddr.sa_family = tun->dev->type; +dev_get_mac_address (&ifr.ifr_hwaddr, net, tun->dev->name);if (copy_to_user (argp, &ifr, ifreq_len)) ret = -EFAULT ;break ;case SIOCSIFHWADDR :/* Set hw address */ - ret =dev_set_mac_address (tun->dev, &ifr.ifr_hwaddr,NULL ); + ret =dev_set_mac_address_user (tun->dev, &ifr.ifr_hwaddr,NULL );break ;case TUNGETSNDBUF :
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1258,6 +1258,7 @@ static const struct usb_device_id products[] = { {QMI_FIXED_INTF(0x19d2, 0x1255, 4)}, {QMI_FIXED_INTF(0x19d2, 0x1256, 4)}, {QMI_FIXED_INTF(0x19d2, 0x1270, 5)}, /* ZTE MF667 */ + {QMI_FIXED_INTF(0x19d2, 0x1275, 3)}, /* ZTE P685M */ {QMI_FIXED_INTF(0x19d2, 0x1401, 2)}, {QMI_FIXED_INTF(0x19d2, 0x1402, 2)}, /* ZTE MF60 */ {QMI_FIXED_INTF(0x19d2, 0x1424, 2)},
drivers/net/wireless/ath/ath10k/mac.c +4 -11
@@ -3763,23 +3763,16 @@ bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)static int ath10k_mac_tx_wmi_mgmt (struct ath10k *ar,struct sk_buff *skb) {struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue; -int ret =0 ; - -spin_lock_bh (&ar->data_lock); -if (skb_queue_len (q) ==ATH10K_MAX_NUM_MGMT_PENDING ) { +if (skb_queue_len_lockless (q) >=ATH10K_MAX_NUM_MGMT_PENDING ) {ath10k_warn (ar,"wmi mgmt tx queue is full\n" ); - ret = -ENOSPC ; - goto unlock; +return -ENOSPC ; } -__skb_queue_tail (q, skb); +skb_queue_tail (q, skb);ieee80211_queue_work (ar->hw, &ar->wmi_mgmt_tx_work); -unlock: -spin_unlock_bh (&ar->data_lock); - -return ret; +return 0 ; } static enum ath10k_mac_tx_path
drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c +32 -0
@@ -40,6 +40,18 @@ static const struct brcmf_dmi_data pov_tab_p1006w_data = {BRCM_CC_43340_CHIP_ID ,2 ,"pov-tab-p1006w-data" }; +static const struct brcmf_dmi_data predia_basic_data = { +BRCM_CC_43341_CHIP_ID ,2 ,"predia-basic" +}; + +/* Note the Voyo winpad A15 tablet uses the same Ampak AP6330 module, with the +* exact same nvram file as the Prowise-PT301 tablet. Since the nvram for the +* Prowise-PT301 is already in linux-firmware we just point to that here. +*/ +static const struct brcmf_dmi_data voyo_winpad_a15_data = { +BRCM_CC_4330_CHIP_ID ,4 ,"Prowise-PT301" +}; +static const struct dmi_system_id dmi_platform_data[] = { {/* ACEPC T8 Cherry Trail Z8350 mini PC */
@@ -111,6 +123,26 @@ static const struct dmi_system_id dmi_platform_data[] = { }, .driver_data = (void *)&pov_tab_p1006w_data, }, + { + /* Predia Basic tablet (+ with keyboard dock) */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Insyde"), + DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"), + /* Mx.WT107.KUBNGEA02 with the version-nr dropped */ + DMI_MATCH(DMI_BIOS_VERSION, "Mx.WT107.KUBNGEA"), + }, + .driver_data = (void *)&predia_basic_data, + }, + { + /* Voyo winpad A15 tablet */ + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), + DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), + /* Above strings are too generic, also match on BIOS date */ + DMI_MATCH(DMI_BIOS_DATE, "11/20/2014"), + }, + .driver_data = (void *)&voyo_winpad_a15_data, + }, {} };
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +20 -0
@@ -2098,6 +2098,23 @@ void mt7615_dma_reset(struct mt7615_dev *dev) }EXPORT_SYMBOL_GPL (mt7615_dma_reset); +void mt7615_tx_token_put (struct mt7615_dev *dev) +{ +struct mt76_txwi_cache *txwi; +int id; + +spin_lock_bh (&dev->token_lock); +idr_for_each_entry (&dev->token, txwi, id) { +mt7615_txp_skb_unmap (&dev->mt76, txwi); +if (txwi->skb) +dev_kfree_skb_any (txwi->skb); +mt76_put_txwi (&dev->mt76, txwi); + } +spin_unlock_bh (&dev->token_lock); +idr_destroy (&dev->token); +} +EXPORT_SYMBOL_GPL (mt7615_tx_token_put); +void mt7615_mac_reset_work (struct work_struct *work) {struct mt7615_phy *phy2;
@@ -2141,6 +2158,9 @@ void mt7615_mac_reset_work(struct work_struct *work)mt76_wr (dev,MT_MCU_INT_EVENT ,MT_MCU_INT_EVENT_PDMA_STOPPED ); +mt7615_tx_token_put (dev); +idr_init (&dev->token); +if (mt7615_wait_reset_state (dev,MT_MCU_CMD_RESET_DONE )) {mt7615_dma_reset (dev);
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h +1 -1
@@ -619,7 +619,7 @@ int mt7615_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr, struct mt76_tx_info *tx_info);void mt7615_tx_complete_skb (struct mt76_dev *mdev,struct mt76_queue_entry *e); - +void mt7615_tx_token_put (struct mt7615_dev *dev);void mt7615_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb);void mt7615_sta_ps (struct mt76_dev *mdev,struct ieee80211_sta *sta,bool ps);
drivers/net/wireless/mediatek/mt76/mt7615/pci_init.c +1 -11
@@ -153,9 +153,7 @@ int mt7615_register_device(struct mt7615_dev *dev)void mt7615_unregister_device (struct mt7615_dev *dev) { -struct mt76_txwi_cache *txwi;bool mcu_running; -int id; mcu_running =mt7615_wait_for_mcu_init (dev);
@@ -165,15 +163,7 @@ void mt7615_unregister_device(struct mt7615_dev *dev)mt7615_mcu_exit (dev);mt7615_dma_cleanup (dev); -spin_lock_bh (&dev->token_lock); -idr_for_each_entry (&dev->token, txwi, id) { -mt7615_txp_skb_unmap (&dev->mt76, txwi); -if (txwi->skb) -dev_kfree_skb_any (txwi->skb); -mt76_put_txwi (&dev->mt76, txwi); - } -spin_unlock_bh (&dev->token_lock); -idr_destroy (&dev->token); +mt7615_tx_token_put (dev);tasklet_disable (&dev->irq_tasklet);
drivers/net/wireless/rsi/rsi_91x_hal.c +2 -1
@@ -248,7 +248,8 @@ int rsi_prepare_data_desc(struct rsi_common *common, struct sk_buff *skb)rsi_set_len_qno (&data_desc->len_qno, (skb->len -FRAME_DESC_SZ ),RSI_WIFI_MGMT_Q ); -if ((skb->len - header_size) ==EAPOL4_PACKET_LEN ) { +if (((skb->len - header_size) ==EAPOL4_PACKET_LEN ) || + ((skb->len - header_size) ==EAPOL4_PACKET_LEN -2 )) { data_desc->misc_flags |=RSI_DESC_REQUIRE_CFM_TO_HOST ; xtend_desc->confirm_frame_type =EAPOL4_CONFIRM ;
drivers/net/wireless/rsi/rsi_91x_sdio.c +1 -5
@@ -153,9 +153,7 @@ static void rsi_handle_interrupt(struct sdio_func *function)if (adapter->priv->fsm_state ==FSM_FW_NOT_LOADED )return ; - dev->sdio_irq_task = current; -rsi_interrupt_handler (adapter); - dev->sdio_irq_task =NULL ; +rsi_set_event (&dev->rx_thread.event); }/**
@@ -1058,8 +1056,6 @@ static int rsi_probe(struct sdio_func *pfunction,rsi_dbg (ERR_ZONE ,"%s: Unable to init rx thrd\n" , __func__); goto fail_kill_thread; } -skb_queue_head_init (&sdev->rx_q.head); - sdev->rx_q.num_rx_pkts =0 ;sdio_claim_host (pfunction);if (sdio_claim_irq (pfunction, rsi_handle_interrupt)) {
drivers/net/wireless/rsi/rsi_91x_sdio_ops.c +13 -39
96 lines not on this page · raw message
drivers/net/wireless/rsi/rsi_sdio.h +1 -7
@@ -107,11 +107,6 @@ struct receive_info {u32 buf_available_counter; }; -struct rsi_sdio_rx_q { -u8 num_rx_pkts; -struct sk_buff_head head; -}; -struct rsi_91x_sdiodev {struct sdio_func *pfunction;struct task_struct *sdio_irq_task;
@@ -124,11 +119,10 @@ struct rsi_91x_sdiodev {u16 tx_blk_size;u8 write_fail;bool buff_status_updated; -struct rsi_sdio_rx_q rx_q;struct rsi_thread rx_thread; +u8 pktbuffer[8192 ]__aligned(4) ; }; -void rsi_interrupt_handler (struct rsi_hw *adapter);int rsi_init_sdio_slave_regs (struct rsi_hw *adapter);int rsi_sdio_read_register (struct rsi_hw *adapter,u32 addr,u8 *data);int rsi_sdio_host_intf_read_pkt (struct rsi_hw *adapter,u8 *pkt,u32 length);
drivers/net/wireless/ti/wl12xx/main.c +0 -3
@@ -635,7 +635,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |=WLCORE_QUIRK_LEGACY_NVS |WLCORE_QUIRK_DUAL_PROBE_TMPL |WLCORE_QUIRK_TKIP_HEADER_SPACE | -WLCORE_QUIRK_START_STA_FAILS |WLCORE_QUIRK_AP_ZERO_SESSION_ID ; wl->sr_fw_name =WL127X_FW_NAME_SINGLE ; wl->mr_fw_name =WL127X_FW_NAME_MULTI ;
@@ -659,7 +658,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |=WLCORE_QUIRK_LEGACY_NVS |WLCORE_QUIRK_DUAL_PROBE_TMPL |WLCORE_QUIRK_TKIP_HEADER_SPACE | -WLCORE_QUIRK_START_STA_FAILS |WLCORE_QUIRK_AP_ZERO_SESSION_ID ; wl->plt_fw_name =WL127X_PLT_FW_NAME ; wl->sr_fw_name =WL127X_FW_NAME_SINGLE ;
@@ -688,7 +686,6 @@ static int wl12xx_identify_chip(struct wl1271 *wl) wl->quirks |=WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN |WLCORE_QUIRK_DUAL_PROBE_TMPL |WLCORE_QUIRK_TKIP_HEADER_SPACE | -WLCORE_QUIRK_START_STA_FAILS |WLCORE_QUIRK_AP_ZERO_SESSION_ID ; wlcore_set_min_fw_ver(wl, WL128X_CHIP_VER,
drivers/net/wireless/ti/wlcore/main.c +1 -14
@@ -2872,21 +2872,8 @@ static int wlcore_join(struct wl1271 *wl, struct wl12xx_vif *wlvif)if (is_ibss) ret =wl12xx_cmd_role_start_ibss (wl, wlvif); -else { -if (wl->quirks &WLCORE_QUIRK_START_STA_FAILS ) { -/* -* TODO: this is an ugly workaround for wl12xx fw -* bug - we are not able to tx/rx after the first -* start_sta, so make dummy start+stop calls, -* and then call start_sta again. -* this should be fixed in the fw. -*/ -wl12xx_cmd_role_start_sta (wl, wlvif); -wl12xx_cmd_role_stop_sta (wl, wlvif); - } - +else ret =wl12xx_cmd_role_start_sta (wl, wlvif); - }return ret; }
drivers/net/wireless/ti/wlcore/wlcore.h +0 -3
@@ -547,9 +547,6 @@ wlcore_set_min_fw_ver(struct wl1271 *wl, unsigned int chip,/* Each RX/TX transaction requires an end-of-transaction transfer */ #define WLCORE_QUIRK_END_OF_TRANSACTION BIT(0) -/* the first start_role(sta) sometimes doesn't work on wl12xx */ -#define WLCORE_QUIRK_START_STA_FAILS BIT(1) -/* wl127x and SPI don't support SDIO block size alignment */ #define WLCORE_QUIRK_TX_BLOCKSIZE_ALIGN BIT(2)
drivers/net/xen-netback/netback.c +11 -1
@@ -1342,11 +1342,21 @@ int xenvif_tx_action(struct xenvif_queue *queue, int budget)return 0 ;gnttab_batch_copy (queue->tx_copy_ops, nr_cops); -if (nr_mops !=0 ) +if (nr_mops !=0 ) { ret =gnttab_map_refs (queue->tx_map_ops,NULL , queue->pages_to_map, nr_mops); +if (ret) { +unsigned int i; + +netdev_err (queue->vif->dev,"Map fail: nr %u ret %d\n" , + nr_mops, ret); +for (i =0 ; i < nr_mops; ++i) +WARN_ON_ONCE (queue->tx_map_ops[i].status == + GNTST_okay); + } + } work_done =xenvif_tx_submit (queue);
drivers/nvme/host/core.c +20 -0
@@ -351,6 +351,26 @@ bool nvme_cancel_request(struct request *req, void *data, bool reserved) }EXPORT_SYMBOL_GPL (nvme_cancel_request); +void nvme_cancel_tagset (struct nvme_ctrl *ctrl) +{ +if (ctrl->tagset) { +blk_mq_tagset_busy_iter (ctrl->tagset, + nvme_cancel_request, ctrl); +blk_mq_tagset_wait_completed_request (ctrl->tagset); + } +} +EXPORT_SYMBOL_GPL (nvme_cancel_tagset); + +void nvme_cancel_admin_tagset (struct nvme_ctrl *ctrl) +{ +if (ctrl->admin_tagset) { +blk_mq_tagset_busy_iter (ctrl->admin_tagset, + nvme_cancel_request, ctrl); +blk_mq_tagset_wait_completed_request (ctrl->admin_tagset); + } +} +EXPORT_SYMBOL_GPL (nvme_cancel_admin_tagset); +bool nvme_change_ctrl_state (struct nvme_ctrl *ctrl,enum nvme_ctrl_state new_state) {
drivers/nvme/host/nvme.h +2 -0
@@ -571,6 +571,8 @@ static inline bool nvme_is_aen_req(u16 qid, __u16 command_id)void nvme_complete_rq (struct request *req);bool nvme_cancel_request (struct request *req,void *data,bool reserved); +void nvme_cancel_tagset (struct nvme_ctrl *ctrl); +void nvme_cancel_admin_tagset (struct nvme_ctrl *ctrl);bool nvme_change_ctrl_state (struct nvme_ctrl *ctrl,enum nvme_ctrl_state new_state);bool nvme_wait_reset (struct nvme_ctrl *ctrl);
drivers/nvme/host/rdma.c +16 -2
@@ -919,12 +919,16 @@ static int nvme_rdma_configure_admin_queue(struct nvme_rdma_ctrl *ctrl, error =nvme_init_identify (&ctrl->ctrl);if (error) - goto out_stop_queue; + goto out_quiesce_queue;return 0 ; +out_quiesce_queue: +blk_mq_quiesce_queue (ctrl->ctrl.admin_q); +blk_sync_queue (ctrl->ctrl.admin_q); out_stop_queue:nvme_rdma_stop_queue (&ctrl->queues[0 ]); +nvme_cancel_admin_tagset (&ctrl->ctrl); out_cleanup_queue:if (new)blk_cleanup_queue (ctrl->ctrl.admin_q);
@@ -1001,8 +1005,10 @@ static int nvme_rdma_configure_io_queues(struct nvme_rdma_ctrl *ctrl, bool new) out_wait_freeze_timed_out:nvme_stop_queues (&ctrl->ctrl); +nvme_sync_io_queues (&ctrl->ctrl);nvme_rdma_stop_io_queues (ctrl); out_cleanup_connect_q: +nvme_cancel_tagset (&ctrl->ctrl);if (new)blk_cleanup_queue (ctrl->ctrl.connect_q); out_free_tag_set:
@@ -1144,10 +1150,18 @@ static int nvme_rdma_setup_ctrl(struct nvme_rdma_ctrl *ctrl, bool new)return 0 ; destroy_io: -if (ctrl->ctrl.queue_count >1 ) +if (ctrl->ctrl.queue_count >1 ) { +nvme_stop_queues (&ctrl->ctrl); +nvme_sync_io_queues (&ctrl->ctrl); +nvme_rdma_stop_io_queues (ctrl); +nvme_cancel_tagset (&ctrl->ctrl);nvme_rdma_destroy_io_queues (ctrl, new); + } destroy_admin: +blk_mq_quiesce_queue (ctrl->ctrl.admin_q); +blk_sync_queue (ctrl->ctrl.admin_q);nvme_rdma_stop_queue (&ctrl->queues[0 ]); +nvme_cancel_admin_tagset (&ctrl->ctrl);nvme_rdma_destroy_admin_queue (ctrl, new);return ret; }
drivers/nvme/host/tcp.c +16 -2
@@ -1815,8 +1815,10 @@ static int nvme_tcp_configure_io_queues(struct nvme_ctrl *ctrl, bool new) out_wait_freeze_timed_out:nvme_stop_queues (ctrl); +nvme_sync_io_queues (ctrl);nvme_tcp_stop_io_queues (ctrl); out_cleanup_connect_q: +nvme_cancel_tagset (ctrl);if (new)blk_cleanup_queue (ctrl->connect_q); out_free_tag_set:
@@ -1878,12 +1880,16 @@ static int nvme_tcp_configure_admin_queue(struct nvme_ctrl *ctrl, bool new) error =nvme_init_identify (ctrl);if (error) - goto out_stop_queue; + goto out_quiesce_queue;return 0 ; +out_quiesce_queue: +blk_mq_quiesce_queue (ctrl->admin_q); +blk_sync_queue (ctrl->admin_q); out_stop_queue:nvme_tcp_stop_queue (ctrl,0 ); +nvme_cancel_admin_tagset (ctrl); out_cleanup_queue:if (new)blk_cleanup_queue (ctrl->admin_q);
@@ -2003,10 +2009,18 @@ static int nvme_tcp_setup_ctrl(struct nvme_ctrl *ctrl, bool new)return 0 ; destroy_io: -if (ctrl->queue_count >1 ) +if (ctrl->queue_count >1 ) { +nvme_stop_queues (ctrl); +nvme_sync_io_queues (ctrl); +nvme_tcp_stop_io_queues (ctrl); +nvme_cancel_tagset (ctrl);nvme_tcp_destroy_io_queues (ctrl, new); + } destroy_admin: +blk_mq_quiesce_queue (ctrl->admin_q); +blk_sync_queue (ctrl->admin_q);nvme_tcp_stop_queue (ctrl,0 ); +nvme_cancel_admin_tagset (ctrl);nvme_tcp_destroy_admin_queue (ctrl, new);return ret; }
drivers/pci/pci.c +8 -1
@@ -3577,7 +3577,14 @@ u32 pci_rebar_get_possible_sizes(struct pci_dev *pdev, int bar)return 0 ;pci_read_config_dword (pdev, pos +PCI_REBAR_CAP , &cap); -return (cap &PCI_REBAR_CAP_SIZES ) >>4 ; + cap &=PCI_REBAR_CAP_SIZES ; + +/* Sapphire RX 5600 XT Pulse has an invalid cap dword for BAR 0 */ +if (pdev->vendor ==PCI_VENDOR_ID_ATI && pdev->device ==0x731f && + bar ==0 && cap ==0x7000 ) + cap =0x3f000 ; + +return cap >>4 ; }/**
drivers/remoteproc/mtk_scp.c +1 -3
@@ -775,21 +775,19 @@ static const struct mtk_scp_of_data mt8192_of_data = { .host_to_scp_int_bit = MT8192_HOST_IPC_INT_BIT, }; -#if defined(CONFIG_OF )static const struct of_device_id mtk_scp_of_match[] = { { .compatible ="mediatek,mt8183-scp" , .data = &mt8183_of_data }, { .compatible ="mediatek,mt8192-scp" , .data = &mt8192_of_data }, {}, };MODULE_DEVICE_TABLE (of, mtk_scp_of_match); -#endif static struct platform_driver mtk_scp_driver = { .probe = scp_probe, .remove = scp_remove, .driver = { .name ="mtk-scp" , - .of_match_table =of_match_ptr (mtk_scp_of_match), + .of_match_table = mtk_scp_of_match, }, };
drivers/scsi/libiscsi.c +74 -74
316 lines not on this page · raw message
drivers/scsi/scsi_transport_iscsi.c +31 -9
@@ -132,7 +132,11 @@ show_transport_handle(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_internal *priv =dev_to_iscsi_internal (dev); -return sprintf (buf,"%llu\n" , (unsigned long long )iscsi_handle (priv->iscsi_transport)); + +if (!capable (CAP_SYS_ADMIN )) +return -EACCES ; +return sysfs_emit (buf,"%llu\n" , + (unsigned long long )iscsi_handle (priv->iscsi_transport)); } static DEVICE_ATTR(handle, S_IRUGO, show_transport_handle, NULL);
@@ -142,7 +146,7 @@ show_transport_##name(struct device *dev, \ struct device_attribute *attr,char *buf) \ { \ struct iscsi_internal *priv = dev_to_iscsi_internal(dev); \ -return sprintf (buf, format"\n" , priv->iscsi_transport->name); \ +return sysfs_emit (buf, format"\n" , priv->iscsi_transport->name);\ } \ static DEVICE_ATTR(name, S_IRUGO, show_transport_##name, NULL);
@@ -183,7 +187,7 @@ static ssize_t show_ep_handle(struct device *dev, struct device_attribute *attr, char *buf) { struct iscsi_endpoint *ep = iscsi_dev_to_endpoint(dev); -return sprintf (buf,"%llu\n" , (unsigned long long ) ep->id); +return sysfs_emit (buf,"%llu\n" , (unsigned long long ) ep->id); } static ISCSI_ATTR(ep, handle, S_IRUGO, show_ep_handle, NULL);
@@ -2883,6 +2887,9 @@ iscsi_set_param(struct iscsi_transport *transport, struct iscsi_uevent *ev)struct iscsi_cls_session *session;int err =0 , value =0 ; +if (ev->u.set_param.len >PAGE_SIZE ) +return -EINVAL ; + session =iscsi_session_lookup (ev->u.set_param.sid); conn =iscsi_conn_lookup (ev->u.set_param.sid, ev->u.set_param.cid);if (!conn || !session)
@@ -3030,6 +3037,9 @@ iscsi_set_host_param(struct iscsi_transport *transport,if (!transport->set_host_param)return -ENOSYS ; +if (ev->u.set_host_param.len >PAGE_SIZE ) +return -EINVAL ; + shost =scsi_host_lookup (ev->u.set_host_param.host_no);if (!shost) { printk(KERN_ERR "set_host_param could not find host no %u\n",
@@ -3617,6 +3627,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group) {int err =0 ;u32 portid; +u32 pdu_len;struct iscsi_uevent *ev =nlmsg_data (nlh);struct iscsi_transport *transport =NULL ;struct iscsi_internal *priv;
@@ -3624,6 +3635,9 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group)struct iscsi_cls_conn *conn;struct iscsi_endpoint *ep =NULL ; +if (!netlink_capable (skb,CAP_SYS_ADMIN )) +return -EPERM ; +if (nlh->nlmsg_type ==ISCSI_UEVENT_PATH_UPDATE ) *group =ISCSI_NL_GRP_UIP ;else
@@ -3756,6 +3770,14 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group) err = -EINVAL ;break ;case ISCSI_UEVENT_SEND_PDU : + pdu_len = nlh->nlmsg_len -sizeof (*nlh) -sizeof (*ev); + +if ((ev->u.send_pdu.hdr_size > pdu_len) || + (ev->u.send_pdu.data_size > (pdu_len - ev->u.send_pdu.hdr_size))) { + err = -EINVAL ; +break ; + } + conn =iscsi_conn_lookup (ev->u.send_pdu.sid, ev->u.send_pdu.cid);if (conn) {mutex_lock (&conn_mutex);
@@ -3960,7 +3982,7 @@ static ssize_t show_conn_state(struct device *dev, conn->state < ARRAY_SIZE(connection_state_names)) state = connection_state_names[conn->state]; -return sprintf (buf,"%s\n" , state); +return sysfs_emit (buf,"%s\n" , state); } static ISCSI_CLASS_ATTR(conn, state, S_IRUGO, show_conn_state, NULL);
@@ -4188,7 +4210,7 @@ show_priv_session_state(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_cls_session *session =iscsi_dev_to_session (dev->parent); -return sprintf (buf,"%s\n" ,iscsi_session_state_name (session->state)); +return sysfs_emit (buf,"%s\n" ,iscsi_session_state_name (session->state)); } static ISCSI_CLASS_ATTR(priv_sess, state, S_IRUGO, show_priv_session_state, NULL);
@@ -4197,7 +4219,7 @@ show_priv_session_creator(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_cls_session *session =iscsi_dev_to_session (dev->parent); -return sprintf (buf,"%d\n" , session->creator); +return sysfs_emit (buf,"%d\n" , session->creator); } static ISCSI_CLASS_ATTR(priv_sess, creator, S_IRUGO, show_priv_session_creator, NULL);
@@ -4206,7 +4228,7 @@ show_priv_session_target_id(struct device *dev, struct device_attribute *attr, char *buf) {struct iscsi_cls_session *session =iscsi_dev_to_session (dev->parent); -return sprintf (buf,"%d\n" , session->target_id); +return sysfs_emit (buf,"%d\n" , session->target_id); } static ISCSI_CLASS_ATTR(priv_sess, target_id, S_IRUGO, show_priv_session_target_id, NULL);
@@ -4219,8 +4241,8 @@ show_priv_session_##field(struct device *dev, \struct iscsi_cls_session *session = \iscsi_dev_to_session (dev->parent); \if (session->field ==-1 ) \ -return sprintf (buf,"off\n" ); \ -return sprintf (buf, format"\n" , session->field); \ +return sysfs_emit (buf,"off\n" ); \ +return sysfs_emit (buf, format"\n" , session->field); \ }#define iscsi_priv_session_attr_store (field) \
drivers/staging/fwserial/fwserial.c +2 -0
@@ -2189,6 +2189,7 @@ static int fwserial_create(struct fw_unit *unit) err =fw_core_add_address_handler (&port->rx_handler, &fw_high_memory_region);if (err) { +tty_port_destroy (&port->port);kfree (port); goto free_ports; }
@@ -2271,6 +2272,7 @@ static int fwserial_create(struct fw_unit *unit) free_ports:for (--i; i >=0 ; --i) { +fw_core_remove_address_handler (&serial->ports[i]->rx_handler);tty_port_destroy (&serial->ports[i]->port);kfree (serial->ports[i]); }
drivers/staging/most/sound/sound.c +2 -0
@@ -96,6 +96,8 @@ static void swap_copy24(u8 *dest, const u8 *source, unsigned int bytes) {unsigned int i =0 ; +if (bytes <2 ) +return ;while (i < bytes -2 ) { dest[i] = source[i +2 ]; dest[i +1 ] = source[i +1 ];
drivers/staging/vc04_services/bcm2835-audio/bcm2835-ctl.c +3 -3
@@ -224,7 +224,7 @@ int snd_bcm2835_new_ctl(struct bcm2835_chip *chip) {int err; -strcpy (chip->card->mixername,"Broadcom Mixer" ); +strscpy (chip->card->mixername,"Broadcom Mixer" ,sizeof (chip->card->mixername)); err =create_ctls (chip,ARRAY_SIZE (snd_bcm2835_ctl), snd_bcm2835_ctl);if (err <0 )return err;
@@ -261,7 +261,7 @@ static const struct snd_kcontrol_new snd_bcm2835_headphones_ctl[] = {int snd_bcm2835_new_headphones_ctl (struct bcm2835_chip *chip) { -strcpy (chip->card->mixername,"Broadcom Mixer" ); +strscpy (chip->card->mixername,"Broadcom Mixer" ,sizeof (chip->card->mixername));return create_ctls (chip,ARRAY_SIZE (snd_bcm2835_headphones_ctl), snd_bcm2835_headphones_ctl); }
@@ -295,7 +295,7 @@ static const struct snd_kcontrol_new snd_bcm2835_hdmi[] = {int snd_bcm2835_new_hdmi_ctl (struct bcm2835_chip *chip) { -strcpy (chip->card->mixername,"Broadcom Mixer" ); +strscpy (chip->card->mixername,"Broadcom Mixer" ,sizeof (chip->card->mixername));return create_ctls (chip,ARRAY_SIZE (snd_bcm2835_hdmi), snd_bcm2835_hdmi); }
drivers/staging/vc04_services/bcm2835-audio/bcm2835-pcm.c +1 -1
@@ -334,7 +334,7 @@ int snd_bcm2835_new_pcm(struct bcm2835_chip *chip, const char *name, pcm->private_data = chip; pcm->nonatomic = true; -strcpy (pcm->name, name); +strscpy (pcm->name, name,sizeof (pcm->name));if (!spdif) { chip->dest = route; chip->volume =0 ;
drivers/staging/vc04_services/bcm2835-audio/bcm2835.c +3 -3
@@ -185,9 +185,9 @@ static int snd_add_child_device(struct device *dev, goto error; } -strcpy (card->driver, audio_driver->driver.name); -strcpy (card->shortname, audio_driver->shortname); -strcpy (card->longname, audio_driver->longname); +strscpy (card->driver, audio_driver->driver.name,sizeof (card->driver)); +strscpy (card->shortname, audio_driver->shortname,sizeof (card->shortname)); +strscpy (card->longname, audio_driver->longname,sizeof (card->longname)); err = audio_driver->newpcm(chip, audio_driver->shortname, audio_driver->route,
drivers/tty/n_tty.c +60 -27
160 lines not on this page · raw message
drivers/tty/tty_io.c +18 -10
@@ -429,8 +429,7 @@ struct tty_driver *tty_find_polling_driver(char *name, int *line)EXPORT_SYMBOL_GPL (tty_find_polling_driver);#endif -static ssize_t hung_up_tty_read (struct file *file,char __user *buf, -size_t count,loff_t *ppos) +static ssize_t hung_up_tty_read (struct kiocb *iocb,struct iov_iter *to) {return 0 ; }
@@ -502,7 +501,7 @@ static const struct file_operations console_fops = {static const struct file_operations hung_up_tty_fops = { .llseek = no_llseek, - .read = hung_up_tty_read, + .read_iter = hung_up_tty_read, .write_iter = hung_up_tty_write, .poll = hung_up_tty_poll, .unlocked_ioctl = hung_up_tty_ioctl,
@@ -860,13 +859,20 @@ static int iterate_tty_read(struct tty_ldisc *ld, struct tty_struct *tty,if (!size)break ; -/* -* A ldisc read error return will override any previously copied -* data (eg -EOVERFLOW from HDLC) -*/ if (size <0 ) { -memzero_explicit (kernel_buf,sizeof (kernel_buf)); -return size; +/* Did we have an earlier error (ie -EFAULT)? */ +if (retval) +break ; + retval = size; + +/* +* -EOVERFLOW means we didn't have enough space +* for a whole packet, and we shouldn't return +* a partial result. +*/ +if (retval == -EOVERFLOW ) + offset =0 ; +break ; } copied =copy_to_iter (kernel_buf, size, to);
@@ -922,8 +928,10 @@ static ssize_t tty_read(struct kiocb *iocb, struct iov_iter *to)/* We want to wait for the line discipline to sort out in this situation */ ld =tty_ldisc_ref_wait (tty); +if (!ld) +return hung_up_tty_read (iocb, to); i = -EIO ; -if (ld && ld->ops->read) +if (ld->ops->read) i =iterate_tty_read (ld, tty, file, to);tty_ldisc_deref (ld);
drivers/tty/vt/consolemap.c +1 -1
@@ -495,7 +495,7 @@ con_insert_unipair(struct uni_pagedir *p, u_short unicode, u_short fontpos) p2[unicode &0x3f ] = fontpos; - p->sum += (fontpos <<20 ) + unicode; + p->sum += (fontpos <<20U ) + unicode;return 0 ; }
drivers/video/fbdev/udlfb.c +1 -0
@@ -1017,6 +1017,7 @@ static void dlfb_ops_destroy(struct fb_info *info) }vfree (dlfb->backing_buffer);kfree (dlfb->edid); +dlfb_free_urb_list (dlfb);usb_put_dev (dlfb->udev);kfree (dlfb);
fs/btrfs/transaction.c +6 -5
@@ -1320,7 +1320,6 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans)struct btrfs_root *gang[8 ];int i;int ret; -int err =0 ;spin_lock (&fs_info->fs_roots_radix_lock);while (1 ) {
@@ -1332,6 +1331,8 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans)break ;for (i =0 ; i < ret; i++) {struct btrfs_root *root = gang[i]; +int ret2; +radix_tree_tag_clear (&fs_info->fs_roots_radix, (unsigned long )root->root_key.objectid,BTRFS_ROOT_TRANS_TAG );
@@ -1353,17 +1354,17 @@ static noinline int commit_fs_roots(struct btrfs_trans_handle *trans) root->node); } - err =btrfs_update_root (trans, fs_info->tree_root, + ret2 =btrfs_update_root (trans, fs_info->tree_root, &root->root_key, &root->root_item); +if (ret2) +return ret2;spin_lock (&fs_info->fs_roots_radix_lock); -if (err) -break ;btrfs_qgroup_free_meta_all_pertrans (root); } }spin_unlock (&fs_info->fs_roots_radix_lock); -return err; +return 0 ; }/*
fs/erofs/super.c +2 -2
@@ -158,8 +158,8 @@ static int erofs_read_superblock(struct super_block *sb) blkszbits = dsb->blkszbits;/* 9(512 bytes) + LOG_SECTORS_PER_BLOCK == LOG_BLOCK_SIZE */ if (blkszbits !=LOG_BLOCK_SIZE ) { -erofs_err (sb,"blksize %u isn't supported on this platform" , -1 << blkszbits); +erofs_err (sb,"blkszbits %u isn't supported on this platform" , + blkszbits); goto out; }
fs/f2fs/namei.c +8 -0
@@ -854,7 +854,11 @@ static int __f2fs_tmpfile(struct inode *dir, struct dentry *dentry,if (whiteout) {f2fs_i_links_write (inode, false); + +spin_lock (&inode->i_lock); inode->i_state |=I_LINKABLE ; +spin_unlock (&inode->i_lock); + *whiteout = inode; }else {d_tmpfile (dentry, inode);
@@ -1040,7 +1044,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry, err =f2fs_add_link (old_dentry, whiteout);if (err) goto put_out_dir; + +spin_lock (&whiteout->i_lock); whiteout->i_state &= ~I_LINKABLE ; +spin_unlock (&whiteout->i_lock); +iput (whiteout); }
fs/f2fs/segment.h +2 -2
@@ -101,11 +101,11 @@ static inline void sanity_check_seg_type(struct f2fs_sb_info *sbi,#define BLKS_PER_SEC (sbi) \ ((sbi)->segs_per_sec * (sbi)->blocks_per_seg)#define GET_SEC_FROM_SEG (sbi, segno) \ - ((segno) / (sbi)->segs_per_sec) + (((segno) == -1) ? -1: (segno) / (sbi)->segs_per_sec)#define GET_SEG_FROM_SEC (sbi, secno) \ ((secno) * (sbi)->segs_per_sec)#define GET_ZONE_FROM_SEC (sbi, secno) \ - ((secno) / (sbi)->secs_per_zone) + (((secno) == -1) ? -1: (secno) / (sbi)->secs_per_zone)#define GET_ZONE_FROM_SEG (sbi, segno) \ GET_ZONE_FROM_SEC(sbi, GET_SEC_FROM_SEG(sbi, segno))
fs/jfs/jfs_filsys.h +1 -0
@@ -268,5 +268,6 @@* fsck() must be run to repair */ #define FM_EXTENDFS 0x00000008/* file system extendfs() in progress */ +#define FM_STATE_MAX 0x0000000f/* max value of s_state */ #endif /* _H_JFS_FILSYS */
fs/jfs/jfs_mount.c +10 -0
@@ -37,6 +37,7 @@#include <linux/fs.h> #include <linux/buffer_head.h> #include <linux/blkdev.h> +#include <linux/log2.h> #include "jfs_incore.h" #include "jfs_filsys.h"
@@ -366,6 +367,15 @@ static int chkSuper(struct super_block *sb) sbi->bsize = bsize; sbi->l2bsize =le16_to_cpu (j_sb->s_l2bsize); +/* check some fields for possible corruption */ +if (sbi->l2bsize !=ilog2 ((u32 )bsize) || + j_sb->pad !=0 || +le32_to_cpu (j_sb->s_state) >FM_STATE_MAX ) { + rc = -EINVAL ; +jfs_err ("jfs_mount: Mount Failure: superblock is corrupt!" ); + goto out; + } +/* * For now, ignore s_pbsize, l2bfactor. All I/O going through buffer * cache.
fs/namei.c +17 -26
14 lines not on this page · raw message
net/core/dev.c +42 -0
42 lines not on this page · raw message
net/dsa/tag_rtl4_a.c +29 -14
43 lines not on this page · raw message
sound/soc/intel/boards/bytcr_rt5640.c +56 -7
63 lines not on this page · raw message
sound/soc/intel/common/soc-intel-quirks.h +25 -0
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.