Linux 5.11.4
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.11.4 kernel.
All users of the 5.11 kernel series must upgrade.
The updated 5.11.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.11.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/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/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/infiniband/ulp/rtrs/rtrs-clt.c | 15 - drivers/infiniband/ulp/rtrs/rtrs-srv.c | 3 drivers/infiniband/ulp/rtrs/rtrs.c | 4 drivers/media/rc/mceusb.c | 9 drivers/media/usb/uvc/uvc_driver.c | 7 drivers/media/usb/zr364xx/zr364xx.c | 49 ++- drivers/media/v4l2-core/v4l2-ctrls.c | 3 drivers/net/can/flexcan.c | 123 +++++++- drivers/net/ethernet/atheros/ag71xx.c | 4 drivers/net/ipa/ipa_reg.h | 22 - drivers/net/phy/sfp-bus.c | 15 + drivers/net/phy/sfp.c | 17 + drivers/net/tap.c | 7 drivers/net/tun.c | 5 drivers/net/usb/qmi_wwan.c | 1 drivers/net/wireless/ath/ath10k/ahb.c | 5 drivers/net/wireless/ath/ath10k/core.c | 25 + drivers/net/wireless/ath/ath10k/core.h | 5 drivers/net/wireless/ath/ath10k/mac.c | 15 - drivers/net/wireless/ath/ath10k/pci.c | 7 drivers/net/wireless/ath/ath10k/sdio.c | 5 drivers/net/wireless/ath/ath10k/snoc.c | 6 drivers/net/wireless/broadcom/brcm80211/brcmfmac/dmi.c | 32 ++ drivers/net/wireless/intel/iwlwifi/cfg/22000.c | 18 + drivers/net/wireless/intel/iwlwifi/iwl-config.h | 3 drivers/net/wireless/intel/iwlwifi/pcie/drv.c | 26 + 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/mediatek/mt76/mt7915/init.c | 18 - drivers/net/wireless/mediatek/mt76/mt7915/mac.c | 24 + drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h | 1 drivers/net/wireless/microchip/wilc1000/netdev.c | 2 drivers/net/wireless/microchip/wilc1000/wlan.c | 15 - drivers/net/wireless/microchip/wilc1000/wlan.h | 3 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/phy/mediatek/phy-mtk-hdmi.c | 1 drivers/phy/mediatek/phy-mtk-mipi-dsi.c | 1 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/vfio/vfio_iommu_type1.c | 15 - 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/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 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/options.c | 22 - net/mptcp/protocol.c | 3 net/mptcp/protocol.h | 11 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 sound/usb/implicit.c | 3 sound/usb/quirks-table.h | 117 +++++++ sound/usb/quirks.c | 20 + tools/testing/selftests/bpf/xdpxceiver.c | 1 132 files changed, 1513 insertions(+), 585 deletions(-)
Alex Elder (1):
net: ipa: avoid field overflow
Alex Williamson (1):
vfio/type1: Use follow_pte()
Alexander Egorenkov (1):
net/af_iucv: remove WARN_ONCE on malformed RX packets
Alexandre Ghiti (1):
riscv: Get rid of MAX_EARLY_MAPPING_SIZE
Ard Biesheuvel (1):
crypto: tcrypt - avoid signed overflow in byte count
Björn Töpel (1):
selftests/bpf: Remove memory leak
Boris Brezillon (1):
phy: mediatek: Add missing MODULE_DEVICE_TABLE()
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
Dan Carpenter (1):
media: zr364xx: fix memory leaks in probe()
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.11.4
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
Ihab Zhaika (1):
iwlwifi: add new cards for So and Qu family
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[]
Jingwen Chen (1):
drm/amd/amdgpu: add error handling to amdgpu_virt_read_pf2vf_data
Jiri Slaby (1):
vt/consolemap: do font sum unsigned
Joakim Zhang (1):
can: flexcan: add CAN wakeup function for i.MX8QM
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
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
Olivia Mackintosh (3):
ALSA: usb-audio: Add support for Pioneer DJM-750
ALSA: usb-audio: Add DJM450 to Pioneer format quirk
ALSA: usb-audio: Add DJM-450 to the quirks table
Pali Rohár (1):
net: sfp: add mode quirk for GPON module Ubiquiti U-Fiber Instant
Paolo Abeni (3):
mptcp: fix spurious retransmissions
mptcp: do not wakeup listener for MPJ subflows
mptcp: fix DATA_FIN generation on early shutdown
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
Russell King (1):
dt-bindings: ethernet-controller: fix fixed-link specification
Ryder Lee (2):
mt76: mt7915: reset token when mac_reset happens
mt76: mt7615: reset token when mac_reset happens
Sabyrzhan Tasbolatov (1):
smackfs: restrict bytes count in smackfs write functions
Sean Young (1):
media: mceusb: sanity check for prescaler value
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
Vsevolod Kozlov (1):
wilc1000: Fix use of void pointer as a wrong struct type
Wen Gong (1):
ath10k: prevent deinitializing NAPI twice
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
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
@@ -205,6 +205,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 = 11 -SUBLEVEL = 3 +SUBLEVEL = 4 EXTRAVERSION = NAME = 💕 Valentine's Day Edition 💕
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
@@ -373,7 +373,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/riscv/mm/init.c +5 -16
@@ -226,8 +226,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)
@@ -302,13 +300,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)
@@ -330,11 +322,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)
@@ -452,7 +442,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
@@ -464,12 +454,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
@@ -4397,6 +4397,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);
@@ -471,8 +471,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 ; }
@@ -764,8 +764,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);
@@ -1201,8 +1201,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);
@@ -1441,8 +1441,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
@@ -1924,12 +1923,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,
@@ -2100,15 +2108,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/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
@@ -3342,10 +3342,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 :
@@ -3539,6 +3542,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
@@ -560,10 +560,14 @@ static int amdgpu_virt_write_vf2pf_data(struct amdgpu_device *adev)static 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
@@ -194,19 +194,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
@@ -194,19 +194,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
@@ -196,19 +196,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
@@ -1470,6 +1470,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
@@ -366,7 +366,6 @@ static void hibmc_pci_remove(struct pci_dev *pdev)drm_dev_unregister (dev);hibmc_unload (dev); -drm_dev_put (dev); }static const struct pci_device_id hibmc_pci_table[] = {
drivers/infiniband/ulp/rtrs/rtrs-clt.c +7 -8
@@ -496,7 +496,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);
@@ -516,7 +516,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);
@@ -623,12 +623,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",
@@ -656,7 +656,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);
@@ -666,7 +666,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 ;
@@ -682,7 +681,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);
@@ -1567,7 +1566,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
@@ -820,7 +820,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 |
@@ -1244,7 +1244,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
@@ -310,7 +310,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 ;
@@ -339,7 +339,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/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/usb/zr364xx/zr364xx.c +31 -18
118 lines not on this page · raw message
drivers/media/v4l2-core/v4l2-ctrls.c +2 -1
@@ -2165,7 +2165,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/net/can/flexcan.c +106 -17
212 lines not on this page · raw message
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/ipa/ipa_reg.h +14 -8
@@ -408,15 +408,18 @@ enum ipa_cs_offload_en {static inline u32 ipa_header_size_encoded (enum ipa_version version,u32 header_size) { +u32 size = header_size &field_mask (HDR_LEN_FMASK );u32 val; - val =u32_encode_bits (header_size,HDR_LEN_FMASK ); -if (version <IPA_VERSION_4_5 ) + val =u32_encode_bits (size,HDR_LEN_FMASK ); +if (version <IPA_VERSION_4_5 ) { +/* ipa_assert(header_size == size); */ return val; + }/* IPA v4.5 adds a few more most-significant bits */ - header_size >>=hweight32 (HDR_LEN_FMASK ); - val |=u32_encode_bits (header_size,HDR_LEN_MSB_FMASK ); + size = header_size >>hweight32 (HDR_LEN_FMASK ); + val |=u32_encode_bits (size,HDR_LEN_MSB_FMASK );return val; }
@@ -425,15 +428,18 @@ static inline u32 ipa_header_size_encoded(enum ipa_version version,static inline u32 ipa_metadata_offset_encoded (enum ipa_version version,u32 offset) { +u32 off = offset &field_mask (HDR_OFST_METADATA_FMASK );u32 val; - val =u32_encode_bits (offset,HDR_OFST_METADATA_FMASK ); -if (version <IPA_VERSION_4_5 ) + val =u32_encode_bits (off,HDR_OFST_METADATA_FMASK ); +if (version <IPA_VERSION_4_5 ) { +/* ipa_assert(offset == off); */ return val; + }/* IPA v4.5 adds a few more most-significant bits */ - offset >>=hweight32 (HDR_OFST_METADATA_FMASK ); - val |=u32_encode_bits (offset,HDR_OFST_METADATA_MSB_FMASK ); + off = offset >>hweight32 (HDR_OFST_METADATA_FMASK ); + val |=u32_encode_bits (off,HDR_OFST_METADATA_MSB_FMASK );return val; }
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 +15 -2
@@ -273,8 +273,21 @@ static const struct sff_data sff_data = {static bool sfp_module_supported (const struct sfp_eeprom_id *id) { -return id->base.phys_id ==SFF8024_ID_SFP && - id->base.phys_ext_id ==SFP_PHYS_EXT_ID_SFP ; +if (id->base.phys_id ==SFF8024_ID_SFP && + id->base.phys_ext_id ==SFP_PHYS_EXT_ID_SFP ) +return true; + +/* SFP GPON module Ubiquiti U-Fiber Instant has in its EEPROM stored +* phys id SFF instead of SFP. Therefore mark this module explicitly +* as supported based on vendor name and pn match. +*/ +if (id->base.phys_id ==SFF8024_ID_SFF_8472 && + id->base.phys_ext_id ==SFP_PHYS_EXT_ID_SFP && + !memcmp (id->base.vendor_name,"UBNT " ,16 ) && + !memcmp (id->base.vendor_pn,"UF-INSTANT " ,16 )) +return true; + +return false; }static const struct sff_data sfp_data = {
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
@@ -3113,15 +3113,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
@@ -1235,6 +1235,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/ahb.c +2 -3
@@ -626,7 +626,7 @@ static int ath10k_ahb_hif_start(struct ath10k *ar) {ath10k_dbg (ar,ATH10K_DBG_BOOT ,"boot ahb hif start\n" ); -napi_enable (&ar->napi); +ath10k_core_napi_enable (ar);ath10k_ce_enable_interrupts (ar);ath10k_pci_enable_legacy_irq (ar);
@@ -644,8 +644,7 @@ static void ath10k_ahb_hif_stop(struct ath10k *ar)ath10k_ahb_irq_disable (ar);synchronize_irq (ar_ahb->irq); -napi_synchronize (&ar->napi); -napi_disable (&ar->napi); +ath10k_core_napi_sync_disable (ar);ath10k_pci_flush (ar); }
drivers/net/wireless/ath/ath10k/core.c +25 -0
@@ -2305,6 +2305,31 @@ void ath10k_core_start_recovery(struct ath10k *ar) }EXPORT_SYMBOL (ath10k_core_start_recovery); +void ath10k_core_napi_enable (struct ath10k *ar) +{ +lockdep_assert_held (&ar->conf_mutex); + +if (test_bit (ATH10K_FLAG_NAPI_ENABLED , &ar->dev_flags)) +return ; + +napi_enable (&ar->napi); +set_bit (ATH10K_FLAG_NAPI_ENABLED , &ar->dev_flags); +} +EXPORT_SYMBOL (ath10k_core_napi_enable); + +void ath10k_core_napi_sync_disable (struct ath10k *ar) +{ +lockdep_assert_held (&ar->conf_mutex); + +if (!test_bit (ATH10K_FLAG_NAPI_ENABLED , &ar->dev_flags)) +return ; + +napi_synchronize (&ar->napi); +napi_disable (&ar->napi); +clear_bit (ATH10K_FLAG_NAPI_ENABLED , &ar->dev_flags); +} +EXPORT_SYMBOL (ath10k_core_napi_sync_disable); +static void ath10k_core_restart (struct work_struct *work) { struct ath10k *ar = container_of(work, struct ath10k, restart_work);
drivers/net/wireless/ath/ath10k/core.h +5 -0
@@ -868,6 +868,9 @@ enum ath10k_dev_flags {/* Indicates that ath10k device is during recovery process and not complete */ ATH10K_FLAG_RESTARTING , + +/* protected by conf_mutex */ + ATH10K_FLAG_NAPI_ENABLED, }; enum ath10k_cal_mode {
@@ -1308,6 +1311,8 @@ static inline bool ath10k_peer_stats_enabled(struct ath10k *ar)extern unsigned long ath10k_coredump_mask; +void ath10k_core_napi_sync_disable (struct ath10k *ar); +void ath10k_core_napi_enable (struct ath10k *ar); struct ath10k *ath10k_core_create(size_t priv_size, struct device *dev, enum ath10k_bus bus, enum ath10k_hw_rev hw_rev,
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/ath/ath10k/pci.c +4 -3
@@ -1958,7 +1958,7 @@ static int ath10k_pci_hif_start(struct ath10k *ar)ath10k_dbg (ar,ATH10K_DBG_BOOT ,"boot hif start\n" ); -napi_enable (&ar->napi); +ath10k_core_napi_enable (ar);ath10k_pci_irq_enable (ar);ath10k_pci_rx_post (ar);
@@ -2075,8 +2075,9 @@ static void ath10k_pci_hif_stop(struct ath10k *ar)ath10k_pci_irq_disable (ar);ath10k_pci_irq_sync (ar); -napi_synchronize (&ar->napi); -napi_disable (&ar->napi); + +ath10k_core_napi_sync_disable (ar); +cancel_work_sync (&ar_pci->dump_work);/* Most likely the device has HTT Rx ring configured. The only way to
drivers/net/wireless/ath/ath10k/sdio.c +2 -3
@@ -1859,7 +1859,7 @@ static int ath10k_sdio_hif_start(struct ath10k *ar)struct ath10k_sdio *ar_sdio =ath10k_sdio_priv (ar);int ret; -napi_enable (&ar->napi); +ath10k_core_napi_enable (ar);/* Sleep 20 ms before HIF interrupts are disabled. * This will give target plenty of time to process the BMI done
@@ -1992,8 +1992,7 @@ static void ath10k_sdio_hif_stop(struct ath10k *ar)spin_unlock_bh (&ar_sdio->wr_async_lock); -napi_synchronize (&ar->napi); -napi_disable (&ar->napi); +ath10k_core_napi_sync_disable (ar); }#ifdef CONFIG_PM
drivers/net/wireless/ath/ath10k/snoc.c +3 -3
@@ -915,8 +915,7 @@ static void ath10k_snoc_hif_stop(struct ath10k *ar)if (!test_bit (ATH10K_FLAG_CRASH_FLUSH , &ar->dev_flags))ath10k_snoc_irq_disable (ar); -napi_synchronize (&ar->napi); -napi_disable (&ar->napi); +ath10k_core_napi_sync_disable (ar);ath10k_snoc_buffer_cleanup (ar);ath10k_dbg (ar,ATH10K_DBG_BOOT ,"boot hif stop\n" ); }
@@ -926,7 +925,8 @@ static int ath10k_snoc_hif_start(struct ath10k *ar)struct ath10k_snoc *ar_snoc =ath10k_snoc_priv (ar);bitmap_clear (ar_snoc->pending_ce_irqs,0 ,CE_COUNT_MAX ); -napi_enable (&ar->napi); + +ath10k_core_napi_enable (ar);ath10k_snoc_irq_enable (ar);ath10k_snoc_rx_post (ar);
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/intel/iwlwifi/cfg/22000.c +18 -0
@@ -635,6 +635,24 @@ const struct iwl_cfg iwl_cfg_snj_a0_mr_a0 = { .num_rbds = IWL_NUM_RBDS_AX210_HE, }; +const struct iwl_cfg iwl_cfg_so_a0_hr_a0 = { + .fw_name_pre =IWL_SO_A_HR_B_FW_PRE , +IWL_DEVICE_AX210 , + .num_rbds =IWL_NUM_RBDS_AX210_HE , +}; + +const struct iwl_cfg iwl_cfg_quz_a0_hr_b0 = { + .fw_name_pre =IWL_QUZ_A_HR_B_FW_PRE , +IWL_DEVICE_22500 , +/* +* This device doesn't support receiving BlockAck with a large bitmap +* so we need to restrict the size of transmitted aggregation to the +* HT size; mac80211 would otherwise pick the HE max (256) by default. +*/ + .max_tx_agg_size =IEEE80211_MAX_AMPDU_BUF_HT , + .num_rbds =IWL_NUM_RBDS_22000_HE , +}; +MODULE_FIRMWARE (IWL_QU_B_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));MODULE_FIRMWARE (IWL_QNJ_B_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));MODULE_FIRMWARE (IWL_QU_C_HR_B_MODULE_FIRMWARE (IWL_22000_UCODE_API_MAX ));
drivers/net/wireless/intel/iwlwifi/iwl-config.h +3 -0
@@ -418,6 +418,7 @@ struct iwl_cfg {#define IWL_CFG_MAC_TYPE_QU 0x33#define IWL_CFG_MAC_TYPE_QUZ 0x35#define IWL_CFG_MAC_TYPE_QNJ 0x36 +#define IWL_CFG_MAC_TYPE_SO 0x37#define IWL_CFG_MAC_TYPE_SNJ 0x42#define IWL_CFG_MAC_TYPE_MA 0x44
@@ -604,6 +605,8 @@ extern const struct iwl_cfg iwlax201_cfg_snj_hr_b0;extern const struct iwl_cfg iwl_cfg_ma_a0_gf_a0;extern const struct iwl_cfg iwl_cfg_ma_a0_mr_a0;extern const struct iwl_cfg iwl_cfg_snj_a0_mr_a0; +extern const struct iwl_cfg iwl_cfg_so_a0_hr_a0; +extern const struct iwl_cfg iwl_cfg_quz_a0_hr_b0;#endif /* CONFIG_IWLMVM */ #endif /* __IWL_CONFIG_H__ */
drivers/net/wireless/intel/iwlwifi/pcie/drv.c +26 -0
@@ -934,6 +934,11 @@ static const struct iwl_dev_info iwl_dev_info_table[] = { IWL_CFG_RF_TYPE_HR1, IWL_CFG_ANY, IWL_CFG_ANY, IWL_CFG_ANY, iwl_quz_a0_hr1_b0, iwl_ax101_name), +_IWL_DEV_INFO (IWL_CFG_ANY ,IWL_CFG_ANY , +IWL_CFG_MAC_TYPE_QUZ ,SILICON_B_STEP , +IWL_CFG_RF_TYPE_HR2 ,IWL_CFG_ANY , +IWL_CFG_NO_160 ,IWL_CFG_ANY , + iwl_cfg_quz_a0_hr_b0, iwl_ax203_name),/* Ma */ _IWL_DEV_INFO(IWL_CFG_ANY, IWL_CFG_ANY,
@@ -952,6 +957,27 @@ static const struct iwl_dev_info iwl_dev_info_table[] = { IWL_CFG_ANY, IWL_CFG_ANY, iwl_cfg_snj_a0_mr_a0, iwl_ma_name), +/* So with Hr */ +_IWL_DEV_INFO (IWL_CFG_ANY ,IWL_CFG_ANY , +IWL_CFG_MAC_TYPE_SO ,IWL_CFG_ANY , +IWL_CFG_RF_TYPE_HR2 ,IWL_CFG_ANY , +IWL_CFG_NO_160 ,IWL_CFG_ANY , + iwl_cfg_so_a0_hr_a0, iwl_ax203_name), +_IWL_DEV_INFO (IWL_CFG_ANY ,IWL_CFG_ANY , +IWL_CFG_MAC_TYPE_SO ,IWL_CFG_ANY , +IWL_CFG_RF_TYPE_HR2 ,IWL_CFG_ANY , +IWL_CFG_NO_160 ,IWL_CFG_ANY , + iwl_cfg_so_a0_hr_a0, iwl_ax203_name), +_IWL_DEV_INFO (IWL_CFG_ANY ,IWL_CFG_ANY , +IWL_CFG_MAC_TYPE_SO ,IWL_CFG_ANY , +IWL_CFG_RF_TYPE_HR1 ,IWL_CFG_ANY , +IWL_CFG_160 ,IWL_CFG_ANY , + iwl_cfg_so_a0_hr_a0, iwl_ax101_name), +_IWL_DEV_INFO (IWL_CFG_ANY ,IWL_CFG_ANY , +IWL_CFG_MAC_TYPE_SO ,IWL_CFG_ANY , +IWL_CFG_RF_TYPE_HR2 ,IWL_CFG_ANY , +IWL_CFG_160 ,IWL_CFG_ANY , + iwl_cfg_so_a0_hr_a0, iwl_ax201_name)#endif /* CONFIG_IWLMVM */ };
drivers/net/wireless/mediatek/mt76/mt7615/mac.c +20 -0
@@ -2058,6 +2058,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;
@@ -2101,6 +2118,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
@@ -583,7 +583,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
@@ -160,9 +160,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);
@@ -172,15 +170,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/mediatek/mt76/mt7915/init.c +1 -17
@@ -672,28 +672,12 @@ int mt7915_register_device(struct mt7915_dev *dev)void mt7915_unregister_device (struct mt7915_dev *dev) { -struct mt76_txwi_cache *txwi; -int id; -mt7915_unregister_ext_phy (dev);mt76_unregister_device (&dev->mt76);mt7915_mcu_exit (dev);mt7915_dma_cleanup (dev); -spin_lock_bh (&dev->token_lock); -idr_for_each_entry (&dev->token, txwi, id) { -mt7915_txp_skb_unmap (&dev->mt76, txwi); -if (txwi->skb) { -struct ieee80211_hw *hw; - - hw =mt76_tx_status_get_hw (&dev->mt76, txwi->skb); -ieee80211_free_txskb (hw, txwi->skb); - } -mt76_put_txwi (&dev->mt76, txwi); - dev->token_count--; - } -spin_unlock_bh (&dev->token_lock); -idr_destroy (&dev->token); +mt7915_tx_token_put (dev);mt76_free_device (&dev->mt76); }
drivers/net/wireless/mediatek/mt76/mt7915/mac.c +24 -0
@@ -1485,6 +1485,27 @@ mt7915_dma_reset(struct mt7915_phy *phy) MT_WFDMA1_GLO_CFG_TX_DMA_EN | MT_WFDMA1_GLO_CFG_RX_DMA_EN); } +void mt7915_tx_token_put (struct mt7915_dev *dev) +{ +struct mt76_txwi_cache *txwi; +int id; + +spin_lock_bh (&dev->token_lock); +idr_for_each_entry (&dev->token, txwi, id) { +mt7915_txp_skb_unmap (&dev->mt76, txwi); +if (txwi->skb) { +struct ieee80211_hw *hw; + + hw =mt76_tx_status_get_hw (&dev->mt76, txwi->skb); +ieee80211_free_txskb (hw, txwi->skb); + } +mt76_put_txwi (&dev->mt76, txwi); + dev->token_count--; + } +spin_unlock_bh (&dev->token_lock); +idr_destroy (&dev->token); +} +/* system error recovery */ void mt7915_mac_reset_work (struct work_struct *work) {
@@ -1525,6 +1546,9 @@ void mt7915_mac_reset_work(struct work_struct *work)mt76_wr (dev,MT_MCU_INT_EVENT ,MT_MCU_INT_EVENT_DMA_STOPPED ); +mt7915_tx_token_put (dev); +idr_init (&dev->token); +if (mt7915_wait_reset_state (dev,MT_MCU_CMD_RESET_DONE )) {mt7915_dma_reset (&dev->phy);
drivers/net/wireless/mediatek/mt76/mt7915/mt7915.h +1 -0
@@ -463,6 +463,7 @@ int mt7915_tx_prepare_skb(struct mt76_dev *mdev, void *txwi_ptr,struct ieee80211_sta *sta, struct mt76_tx_info *tx_info);void mt7915_tx_complete_skb (struct mt76_dev *mdev,struct mt76_queue_entry *e); +void mt7915_tx_token_put (struct mt7915_dev *dev);int mt7915_init_tx_queues (struct mt7915_phy *phy,int idx,int n_desc);void mt7915_queue_rx_skb (struct mt76_dev *mdev,enum mt76_rxq_id q,struct sk_buff *skb);
drivers/net/wireless/microchip/wilc1000/netdev.c +1 -1
@@ -737,7 +737,7 @@ netdev_tx_t wilc_mac_xmit(struct sk_buff *skb, struct net_device *ndev) vif->netstats.tx_packets++; vif->netstats.tx_bytes += tx_data->size; - queue_count =wilc_wlan_txq_add_net_pkt (ndev, (void *)tx_data, + queue_count =wilc_wlan_txq_add_net_pkt (ndev, tx_data, tx_data->buff, tx_data->size, wilc_tx_complete);
drivers/net/wireless/microchip/wilc1000/wlan.c +8 -7
@@ -408,7 +408,8 @@ static inline u8 ac_change(struct wilc *wilc, u8 *ac)return 1 ; } -int wilc_wlan_txq_add_net_pkt (struct net_device *dev,void *priv,u8 *buffer, +int wilc_wlan_txq_add_net_pkt (struct net_device *dev, +struct tx_complete_data *tx_data,u8 *buffer,u32 buffer_size,void (*tx_complete_fn)(void *,int )) {
@@ -420,27 +421,27 @@ int wilc_wlan_txq_add_net_pkt(struct net_device *dev, void *priv, u8 *buffer, wilc = vif->wilc;if (wilc->quit) { -tx_complete_fn (priv,0 ); +tx_complete_fn (tx_data,0 );return 0 ; } tqe =kmalloc (sizeof (*tqe),GFP_ATOMIC );if (!tqe) { -tx_complete_fn (priv,0 ); +tx_complete_fn (tx_data,0 );return 0 ; } tqe->type =WILC_NET_PKT ; tqe->buffer = buffer; tqe->buffer_size = buffer_size; tqe->tx_complete_func = tx_complete_fn; - tqe->priv = priv; + tqe->priv = tx_data; tqe->vif = vif; - q_num =ac_classify (wilc, priv); + q_num =ac_classify (wilc, tx_data->skb); tqe->q_num = q_num;if (ac_change (wilc, &q_num)) { -tx_complete_fn (priv,0 ); +tx_complete_fn (tx_data,0 );kfree (tqe);return 0 ; }
@@ -451,7 +452,7 @@ int wilc_wlan_txq_add_net_pkt(struct net_device *dev, void *priv, u8 *buffer,tcp_process (dev, tqe);wilc_wlan_txq_add_to_tail (dev, q_num, tqe); }else { -tx_complete_fn (priv,0 ); +tx_complete_fn (tx_data,0 );kfree (tqe); }
drivers/net/wireless/microchip/wilc1000/wlan.h +2 -1
@@ -399,7 +399,8 @@ int wilc_wlan_firmware_download(struct wilc *wilc, const u8 *buffer, u32 buffer_size);int wilc_wlan_start (struct wilc *wilc);int wilc_wlan_stop (struct wilc *wilc,struct wilc_vif *vif); -int wilc_wlan_txq_add_net_pkt (struct net_device *dev,void *priv,u8 *buffer, +int wilc_wlan_txq_add_net_pkt (struct net_device *dev, +struct tx_complete_data *tx_data,u8 *buffer,u32 buffer_size,void (*tx_complete_fn)(void *,int ));int wilc_wlan_handle_txq (struct wilc *wl,u32 *txq_count);
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
@@ -371,6 +371,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
@@ -576,6 +576,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
@@ -3596,7 +3596,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/phy/mediatek/phy-mtk-hdmi.c +1 -0
@@ -201,6 +201,7 @@ static const struct of_device_id mtk_hdmi_phy_match[] = { }, {}, }; +MODULE_DEVICE_TABLE (of, mtk_hdmi_phy_match);static struct platform_driver mtk_hdmi_phy_driver = { .probe = mtk_hdmi_phy_probe,
drivers/phy/mediatek/phy-mtk-mipi-dsi.c +1 -0
@@ -233,6 +233,7 @@ static const struct of_device_id mtk_mipi_tx_match[] = { .data = &mt8183_mipitx_data }, { }, }; +MODULE_DEVICE_TABLE (of, mtk_mipi_tx_match);struct platform_driver mtk_mipi_tx_driver = { .probe = mtk_mipi_tx_probe,
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
@@ -86,6 +86,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,
@@ -859,13 +858,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);
@@ -921,8 +927,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/vfio/vfio_iommu_type1.c +13 -2
@@ -24,6 +24,7 @@#include <linux/compat.h> #include <linux/device.h> #include <linux/fs.h> +#include <linux/highmem.h> #include <linux/iommu.h> #include <linux/module.h> #include <linux/mm.h>
@@ -431,9 +432,11 @@ static int follow_fault_pfn(struct vm_area_struct *vma, struct mm_struct *mm, unsigned long vaddr, unsigned long *pfn, bool write_fault) { + pte_t *ptep; +spinlock_t *ptl;int ret; - ret =follow_pfn (vma, vaddr, pfn); + ret =follow_pte (vma->vm_mm, vaddr, &ptep, &ptl);if (ret) {bool unlocked = false;
@@ -447,9 +450,17 @@ static int follow_fault_pfn(struct vm_area_struct *vma, struct mm_struct *mm,if (ret)return ret; - ret =follow_pfn (vma, vaddr, pfn); + ret =follow_pte (vma->vm_mm, vaddr, &ptep, &ptl); +if (ret) +return ret; } +if (write_fault && !pte_write (*ptep)) + ret = -EFAULT ; +else + *pfn =pte_pfn (*ptep); + +pte_unmap_unlock (ptep, ptl);return ret; }
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
@@ -1319,7 +1319,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 ) {
@@ -1331,6 +1330,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 );
@@ -1350,17 +1351,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
@@ -855,7 +855,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);
@@ -1041,7 +1045,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
129 lines not on this page · raw message
fs/xfs/xfs_iops.c +1 -1
@@ -846,7 +846,7 @@ xfs_setattr_size(ASSERT (xfs_isilocked (ip,XFS_MMAPLOCK_EXCL ));ASSERT (S_ISREG (inode->i_mode));ASSERT ((iattr->ia_valid & (ATTR_UID |ATTR_GID |ATTR_ATIME |ATTR_ATIME_SET | -ATTR_MTIME_SET |ATTR_KILL_PRIV |ATTR_TIMES_SET )) ==0 ); +ATTR_MTIME_SET |ATTR_TIMES_SET )) ==0 ); oldsize = inode->i_size; newsize = iattr->ia_size;
include/linux/netdevice.h +3 -0
@@ -3918,6 +3918,9 @@ int dev_pre_changeaddr_notify(struct net_device *dev, const char *addr, struct netlink_ext_ack *extack);int dev_set_mac_address (struct net_device *dev,struct sockaddr *sa,struct netlink_ext_ack *extack); +int dev_set_mac_address_user (struct net_device *dev,struct sockaddr *sa, +struct netlink_ext_ack *extack); +int dev_get_mac_address (struct sockaddr *sa,struct net *net,char *dev_name);int dev_change_carrier (struct net_device *,bool new_carrier);int dev_get_phys_port_id (struct net_device *dev,struct netdev_phys_item_id *ppid);
include/linux/swap.h +1 -0
@@ -482,6 +482,7 @@ struct backing_dev_info;extern int init_swap_address_space (unsigned int type,unsigned long nr_pages);extern void exit_swap_address_space (unsigned int type);extern struct swap_info_struct *get_swap_device (swp_entry_t entry); +sector_t swap_page_sector (struct page *page);static inline void put_swap_device (struct swap_info_struct *si) {
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.
sound/usb/quirks-table.h +117 -0
117 lines not on this page · raw message
tools/testing/selftests/bpf/xdpxceiver.c +0 -1
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.