Linux 5.4.81
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.4.81 kernel.
All users of the 5.4 kernel series must upgrade.
The updated 5.4.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.4.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arc/include/asm/pgtable.h | 2 arch/arm/boot/dts/dra76x.dtsi | 4 arch/arm/include/asm/pgtable-2level.h | 2 arch/arm/include/asm/pgtable-3level.h | 2 arch/arm/mach-omap2/cpuidle44xx.c | 8 - arch/arm64/boot/dts/nvidia/tegra194.dtsi | 2 arch/arm64/include/asm/pgtable.h | 34 ++-- arch/mips/include/asm/pgtable-32.h | 3 arch/powerpc/include/asm/book3s/32/pgtable.h | 2 arch/powerpc/include/asm/book3s/64/kup-radix.h | 2 arch/powerpc/include/asm/nohash/32/pgtable.h | 2 arch/powerpc/kvm/book3s_xive_native.c | 7 arch/riscv/include/asm/pgtable-32.h | 2 arch/x86/events/intel/cstate.c | 6 arch/x86/events/intel/uncore.c | 4 arch/x86/events/intel/uncore.h | 12 - arch/x86/events/rapl.c | 14 - arch/x86/include/asm/kvm_host.h | 1 arch/x86/kernel/cpu/bugs.c | 4 arch/x86/kernel/cpu/mce/core.c | 6 arch/x86/kernel/cpu/resctrl/rdtgroup.c | 65 +++----- arch/x86/kvm/irq.c | 85 ++++------- arch/x86/kvm/lapic.c | 2 arch/x86/kvm/x86.c | 18 +- arch/x86/xen/spinlock.c | 12 + arch/xtensa/include/asm/uaccess.h | 2 drivers/bus/ti-sysc.c | 3 drivers/dma/pl330.c | 2 drivers/dma/xilinx/xilinx_dma.c | 4 drivers/firmware/efi/Kconfig | 2 drivers/hid/hid-cypress.c | 44 +++++ drivers/hid/hid-ids.h | 9 + drivers/hid/hid-input.c | 3 drivers/hid/hid-ite.c | 61 +++++++- drivers/hid/hid-logitech-hidpp.c | 6 drivers/hid/hid-quirks.c | 5 drivers/hid/hid-sensor-hub.c | 3 drivers/hid/hid-uclogic-core.c | 2 drivers/hid/hid-uclogic-params.c | 2 drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 9 - drivers/infiniband/hw/mthca/mthca_cq.c | 10 - drivers/input/serio/i8042.c | 12 + drivers/irqchip/irq-sni-exiu.c | 2 drivers/net/can/m_can/m_can.c | 4 drivers/net/can/usb/gs_usb.c | 131 +++++++++-------- drivers/net/dsa/mv88e6xxx/chip.c | 2 drivers/net/dsa/mv88e6xxx/global1.c | 31 ++++ drivers/net/dsa/mv88e6xxx/global1.h | 1 drivers/net/ethernet/amazon/ena/ena_netdev.c | 17 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c | 3 drivers/net/ethernet/ibm/ibmvnic.c | 14 + drivers/net/ethernet/intel/i40e/i40e.h | 1 drivers/net/ethernet/intel/i40e/i40e_main.c | 22 +- drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 26 +-- drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c | 3 drivers/nfc/s3fwrn5/i2c.c | 4 drivers/nvme/host/pci.c | 15 + drivers/phy/tegra/xusb.c | 1 drivers/platform/x86/thinkpad_acpi.c | 1 drivers/platform/x86/toshiba_acpi.c | 3 drivers/s390/net/qeth_core.h | 9 - drivers/s390/net/qeth_core_main.c | 82 +++++++--- drivers/scsi/libiscsi.c | 23 +-- drivers/scsi/ufs/ufshcd.c | 6 drivers/spi/spi-bcm-qspi.c | 34 +--- drivers/spi/spi-bcm2835.c | 18 -- drivers/spi/spi-bcm2835aux.c | 3 drivers/staging/ralink-gdma/Kconfig | 1 drivers/target/iscsi/iscsi_target.c | 17 +- drivers/tee/optee/call.c | 3 drivers/usb/core/devio.c | 14 - drivers/usb/core/quirks.c | 10 + drivers/usb/gadget/function/f_midi.c | 10 - drivers/usb/gadget/legacy/inode.c | 3 drivers/vhost/scsi.c | 42 +---- drivers/video/fbdev/hyperv_fb.c | 7 fs/btrfs/qgroup.c | 2 fs/btrfs/tree-checker.c | 3 fs/btrfs/volumes.c | 8 - fs/cifs/cifsacl.c | 1 fs/cifs/smb2ops.c | 88 +++++++++-- fs/efivarfs/inode.c | 2 fs/efivarfs/super.c | 1 fs/proc/self.c | 7 include/asm-generic/pgtable.h | 13 + include/linux/netfilter.h | 2 include/scsi/libiscsi.h | 3 include/trace/events/writeback.h | 8 - include/uapi/linux/wireless.h | 6 include/uapi/sound/skl-tplg-interface.h | 2 net/batman-adv/log.c | 1 net/ipv4/fib_frontend.c | 2 sound/soc/intel/skylake/bxt-sst.c | 3 sound/soc/intel/skylake/cnl-sst.c | 35 +++- sound/soc/intel/skylake/skl-nhlt.c | 3 sound/soc/intel/skylake/skl-sst-dsp.h | 2 sound/soc/intel/skylake/skl-topology.c | 159 ++++++++++++++++++++- sound/soc/intel/skylake/skl-topology.h | 1 sound/soc/intel/skylake/skl.c | 29 +-- tools/perf/util/dwarf-aux.c | 8 + tools/perf/util/stat-display.c | 5 virt/kvm/arm/vgic/vgic-mmio-v3.c | 22 ++ 104 files changed, 1012 insertions(+), 453 deletions(-)
Alan Stern (2):
USB: core: Change %pK for __user pointers to %px
USB: core: Fix regression in Hercules audio card
Anand K Mistry (1):
x86/speculation: Fix prctl() when spectre_v2_user={seccomp,prctl},ibpb
Andrew Lunn (1):
net: dsa: mv88e6xxx: Wait for EEPROM done after HW reset
Ard Biesheuvel (1):
efivarfs: revert "fix memory leak in efivarfs_create()"
Arnd Bergmann (1):
arch: pgtable: define MAX_POSSIBLE_PHYSMEM_BITS where needed
Avraham Stern (1):
iwlwifi: mvm: write queue_sync_state only for sync
Benjamin Berg (1):
platform/x86: thinkpad_acpi: Send tablet mode switch at wakeup time
Brian Masney (1):
x86/xen: don't unbind uninitialized lock_kicker_irq
Cezary Rojewski (6):
ASoC: Intel: Skylake: Remove superfluous chip initialization
ASoC: Intel: Skylake: Select hda configuration permissively
ASoC: Intel: Skylake: Enable codec wakeup during chip init
ASoC: Intel: Skylake: Shield against no-NHLT configurations
ASoC: Intel: Allow for ROM init retry on CNL platforms
ASoC: Intel: Skylake: Await purge request ack on CNL
Chen Baozi (1):
irqchip/exiu: Fix the index of fwspec for IRQ type
Chris Ye (1):
HID: add HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE for Gamevice devices
Cong Wang (1):
netfilter: clear skb->next in NF_HOOK_LIST()
Cédric Le Goater (1):
KVM: PPC: Book3S HV: XIVE: Fix possible oops when accessing ESB page
Daniel Xu (1):
btrfs: tree-checker: add missing return after error in root_item
David Sterba (1):
btrfs: tree-checker: add missing returns after data_ref alignment checks
Dexuan Cui (1):
video: hyperv_fb: Fix the cache type when mapping the VRAM
Dipen Patel (1):
arm64: tegra: Wrong AON HSP reg property size
Filipe Manana (1):
btrfs: fix lockdep splat when reading qgroup config on mount
Florian Klink (1):
ipv4: use IS_ENABLED instead of ifdef
Frank Yang (1):
HID: cypress: Support Varmilo Keyboards' media hotkeys
Gabriele Paoloni (1):
x86/mce: Do not overwrite no_way_out if mce_end() fails
Geert Uytterhoeven (1):
efi: EFI_EARLYCON should depend on EFI
Greg Kroah-Hartman (1):
Linux 5.4.81
Hans de Goede (4):
HID: ite: Replace ABS_MISC 120/121 events with touchpad on/off keypresses
Input: i8042 - allow insmod to succeed on devices without an i8042 controller
HID: logitech-hidpp: Add HIDPP_CONSUMER_VENDOR_KEYS quirk for the Dinovo Edge
HID: Add Logitech Dinovo Edge battery quirk
Hauke Mehrtens (1):
wireless: Use linux/stddef.h instead of stddef.h
Hui Su (1):
trace: fix potenial dangerous pointer
Jens Axboe (1):
proc: don't allow async path resolution of /proc/self components
Jiri Kosina (1):
HID: add support for Sega Saturn
Johannes Thumshirn (1):
btrfs: don't access possibly stale fs_info data for printing duplicate device
Julian Wiedmann (3):
s390/qeth: make af_iucv TX notification call more robust s390/qeth: fix af_iucv notification race s390/qeth: fix tear down of async TX buffers
Kaixu Xia (1):
platform/x86: toshiba_acpi: Fix the wrong variable assignment
Krzysztof Kozlowski (1):
nfc: s3fwrn5: use signed integer for parsing GPIO numbers
Laurent Pinchart (1):
xtensa: uaccess: Add missing __user to strncpy_from_user() prototype
Lee Duncan (1):
scsi: libiscsi: Fix NOP race condition
Lijun Pan (4):
ibmvnic: fix call_netdevice_notifiers in do_reset
ibmvnic: notify peers when failover and migration happen
ibmvnic: fix NULL pointer dereference in reset_sub_crq_queues
ibmvnic: fix NULL pointer dereference in ibmvic_reset_crq
Lukas Wunner (2):
spi: bcm-qspi: Fix use-after-free on unbind
spi: bcm2835: Fix use-after-free on unbind
Marc Ferland (1):
dmaengine: xilinx_dma: use readl_poll_timeout_atomic variant
Marc Kleine-Budde (4):
ARM: dts: dra76x: m_can: fix order of clocks
can: gs_usb: fix endianess problem with candleLight firmware
can: m_can: m_can_open(): remove IRQF_TRIGGER_FALLING from request_threaded_irq()'s flags
can: m_can: fix nominal bitiming tseg2 min for version >= 3.1
Marc Zyngier (1):
phy: tegra: xusb: Fix dangling pointer on probe failure
Martijn van de Streek (1):
HID: uclogic: Add ID for Trust Flex Design Tablet
Masami Hiramatsu (1):
perf probe: Fix to die_entrypc() returns error correctly
Mateusz Gorski (2):
ASoC: Intel: Multiple I/O PCM format support for pipe
ASoC: Intel: Skylake: Automatic DMIC format configuration according to information from NHLT
Michael Chan (1):
bnxt_en: Release PCI regions when DMA mask setup fails during probe.
Mike Christie (2):
vhost scsi: fix cmd completion race
scsi: target: iscsi: Fix cmd abort fabric stop race
Minwoo Im (1):
nvme: free sq/cq dbbuf pointers when dbbuf set fails
Namhyung Kim (1):
perf stat: Use proper cpu for shadow stats
Namjae Jeon (1):
cifs: fix a memleak with modefromsid
Nathan Chancellor (1):
spi: bcm2835aux: Restore err assignment in bcm2835aux_spi_probe
Necip Fazil Yildiran (1):
staging: ralink-gdma: fix kconfig dependency bug for DMA_RALINK
Pablo Ceballos (1):
HID: hid-sensor-hub: Fix issue with devices with no report ID
Paolo Bonzini (2):
KVM: x86: handle !lapic_in_kernel case in kvm_cpu_*_extint
KVM: x86: Fix split-irqchip vs interrupt injection window request
Raju Rangoju (1):
cxgb4: fix the panic caused by non smac rewrite
Rohith Surabattula (3):
smb3: Call cifs reconnect from demultiplex thread
smb3: Avoid Mid pending list corruption
smb3: Handle error case during offload read path
Rui Miguel Silva (1):
optee: add writeback to valid memory type
Sami Tolvanen (1):
perf/x86: fix sysfs type mismatches
Shay Agroskin (1):
net: ena: set initial DMA width to avoid intel iommu issue
Stanley Chu (1):
scsi: ufs: Fix race between shutdown and runtime resume flow
Stephen Rothwell (1):
powerpc/64s: Fix allnoconfig build since uaccess flush
Sugar Zhang (1):
dmaengine: pl330: _prep_dma_memcpy: Fix wrong burst size
Sylwester Dziedziuch (1):
i40e: Fix removing driver while bare-metal VFs pass traffic
Taehee Yoo (1):
batman-adv: set .owner to THIS_MODULE
Tony Lindgren (2):
bus: ti-sysc: Fix bogus resetdone warning on enable for cpsw
ARM: OMAP2+: Manage MPU state properly for omap_enter_idle_coupled()
Wenpeng Liang (1):
RDMA/hns: Fix retry_cnt and rnr_cnt when querying QP
Will Deacon (2):
arm64: pgtable: Fix pte_accessible()
arm64: pgtable: Ensure dirty bit is preserved across pte_wrprotect()
Xiaochen Shen (2):
x86/resctrl: Remove superfluous kernfs_get() calls to prevent refcount leak x86/resctrl: Add necessary kernfs_put() calls to prevent refcount leak
Xiongfeng Wang (1):
IB/mthca: fix return value of error branch in mthca_init_cq()
Yixian Liu (1):
RDMA/hns: Bugfix for memory window mtpt configuration
Zenghui Yu (1):
KVM: arm64: vgic-v3: Drop the reporting of GICR_TYPER.Last for userspace
Zhang Changzhong (2):
bnxt_en: fix error return code in bnxt_init_one()
bnxt_en: fix error return code in bnxt_init_board()
Zhang Qilong (2):
usb: gadget: f_midi: Fix memleak in f_midi_alloc
usb: gadget: Fix memleak in gadgetfs_fill_super
penghao (1):
USB: quirks: Add USB_QUIRK_DISCONNECT_SUSPEND quirk for Lenovo A630Z TIO built-in usb-audio card
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 4 -SUBLEVEL = 80 +SUBLEVEL = 81 EXTRAVERSION = NAME = Kleptomaniac Octopus
arch/arc/include/asm/pgtable.h +2 -0
@@ -135,8 +135,10 @@#ifdef CONFIG_ARC_HAS_PAE40 #define PTE_BITS_NON_RWX_IN_PD1 (0xff00000000 | PAGE_MASK | _PAGE_CACHEABLE) +#define MAX_POSSIBLE_PHYSMEM_BITS 40#else #define PTE_BITS_NON_RWX_IN_PD1 (PAGE_MASK | _PAGE_CACHEABLE) +#define MAX_POSSIBLE_PHYSMEM_BITS 32#endif /**************************************************************************
arch/arm/boot/dts/dra76x.dtsi +2 -2
@@ -32,8 +32,8 @@ interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "int0", "int1"; - clocks = <&mcan_clk>, <&l3_iclk_div>; - clock-names = "cclk", "hclk"; + clocks = <&l3_iclk_div>, <&mcan_clk>; + clock-names = "hclk", "cclk"; bosch,mram-cfg = <0x0 0 0 32 0 0 1 1>; }; };
arch/arm/include/asm/pgtable-2level.h +2 -0
@@ -75,6 +75,8 @@#define PTE_HWTABLE_OFF (PTE_HWTABLE_PTRS * sizeof(pte_t))#define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u32)) +#define MAX_POSSIBLE_PHYSMEM_BITS 32 +/* * PMD_SHIFT determines the size of the area a second-level page table can map * PGDIR_SHIFT determines what a third-level page table entry can map
arch/arm/include/asm/pgtable-3level.h +2 -0
@@ -25,6 +25,8 @@#define PTE_HWTABLE_OFF (0)#define PTE_HWTABLE_SIZE (PTRS_PER_PTE * sizeof(u64)) +#define MAX_POSSIBLE_PHYSMEM_BITS 40 +/* * PGDIR_SHIFT determines the size a top-level page table entry can map. */
arch/arm/mach-omap2/cpuidle44xx.c +5 -3
@@ -175,8 +175,11 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,if (mpuss_can_lose_context) { error =cpu_cluster_pm_enter ();if (error) { -omap_set_pwrdm_state (mpu_pd,PWRDM_POWER_ON ); - goto cpu_cluster_pm_out; + index =0 ; + cx = state_ptr + index; +pwrdm_set_logic_retst (mpu_pd, cx->mpu_logic_state); +omap_set_pwrdm_state (mpu_pd, cx->mpu_state); + mpuss_can_lose_context =0 ; } } }
@@ -184,7 +187,6 @@ static int omap_enter_idle_coupled(struct cpuidle_device *dev,omap4_enter_lowpower (dev->cpu, cx->cpu_state); cpu_done[dev->cpu] = true; -cpu_cluster_pm_out:/* Wakeup CPU1 only if it is not offlined */ if (dev->cpu ==0 &&cpumask_test_cpu (1 , cpu_online_mask)) {
arch/arm64/boot/dts/nvidia/tegra194.dtsi +1 -1
@@ -692,7 +692,7 @@ hsp_aon: hsp@c150000 { compatible = "nvidia,tegra194-hsp", "nvidia,tegra186-hsp"; - reg = <0x0c150000 0xa0000>; + reg = <0x0c150000 0x90000>; interrupts = <GIC_SPI 133 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 134 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 135 IRQ_TYPE_LEVEL_HIGH>,
arch/arm64/include/asm/pgtable.h +18 -16
@@ -98,8 +98,6 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];#define pte_valid (pte) (!!(pte_val(pte) & PTE_VALID))#define pte_valid_not_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == PTE_VALID) -#define pte_valid_young (pte) \ - ((pte_val(pte) & (PTE_VALID | PTE_AF)) == (PTE_VALID | PTE_AF))#define pte_valid_user (pte) \ ((pte_val(pte) & (PTE_VALID | PTE_USER)) == (PTE_VALID | PTE_USER))
@@ -107,9 +105,12 @@ extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];* Could the pte be present in the TLB? We must check mm_tlb_flush_pending * so that we don't erroneously return false for pages that have been * remapped as PROT_NONE but are yet to be flushed from the TLB. +* Note that we can't make any assumptions based on the state of the access +* flag, since ptep_clear_flush_young() elides a DSB when invalidating the +* TLB. */ #define pte_accessible (mm, pte) \ - (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid_young(pte)) + (mm_tlb_flush_pending(mm) ? pte_present(pte) : pte_valid(pte))/* * p??_access_permitted() is true for valid user mappings (subject to the
@@ -135,13 +136,6 @@ static inline pte_t set_pte_bit(pte_t pte, pgprot_t prot)return pte; } -static inline pte_t pte_wrprotect (pte_t pte) -{ - pte =clear_pte_bit (pte,__pgprot (PTE_WRITE )); - pte =set_pte_bit (pte,__pgprot (PTE_RDONLY )); -return pte; -} -static inline pte_t pte_mkwrite (pte_t pte) { pte =set_pte_bit (pte,__pgprot (PTE_WRITE ));
@@ -167,6 +161,20 @@ static inline pte_t pte_mkdirty(pte_t pte)return pte; } +static inline pte_t pte_wrprotect (pte_t pte) +{ +/* +* If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY +* clear), set the PTE_DIRTY bit. +*/ +if (pte_hw_dirty (pte)) + pte =pte_mkdirty (pte); + + pte =clear_pte_bit (pte,__pgprot (PTE_WRITE )); + pte =set_pte_bit (pte,__pgprot (PTE_RDONLY )); +return pte; +} +static inline pte_t pte_mkold (pte_t pte) {return clear_pte_bit (pte,__pgprot (PTE_AF ));
@@ -782,12 +790,6 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm, unsigned long addres pte =READ_ONCE (*ptep); do { old_pte = pte; - /* - * If hardware-dirty (PTE_WRITE/DBM bit set and PTE_RDONLY - * clear), set the PTE_DIRTY bit. - */ - if (pte_hw_dirty(pte)) - pte = pte_mkdirty(pte); pte = pte_wrprotect(pte); pte_val(pte) = cmpxchg_relaxed(&pte_val(*ptep), pte_val(old_pte), pte_val(pte));
arch/mips/include/asm/pgtable-32.h +3 -0
@@ -155,6 +155,7 @@ static inline void pmd_clear(pmd_t *pmdp)#if defined(CONFIG_XPA ) +#define MAX_POSSIBLE_PHYSMEM_BITS 40#define pte_pfn (x) (((unsigned long)((x).pte_high >> _PFN_SHIFT)) | (unsigned long)((x).pte_low << _PAGE_PRESENT_SHIFT))static inline pte_t pfn_pte (unsigned long pfn,pgprot_t prot)
@@ -170,6 +171,7 @@ pfn_pte(unsigned long pfn, pgprot_t prot)#elif defined(CONFIG_PHYS_ADDR_T_64BIT ) && defined(CONFIG_CPU_MIPS32 ) +#define MAX_POSSIBLE_PHYSMEM_BITS 36#define pte_pfn (x) ((unsigned long)((x).pte_high >> 6))static inline pte_t pfn_pte (unsigned long pfn,pgprot_t prot)
@@ -184,6 +186,7 @@ static inline pte_t pfn_pte(unsigned long pfn, pgprot_t prot)#else +#define MAX_POSSIBLE_PHYSMEM_BITS 32#ifdef CONFIG_CPU_VR41XX #define pte_pfn (x) ((unsigned long)((x).pte >> (PAGE_SHIFT + 2)))#define pfn_pte (pfn, prot) __pte(((pfn) << (PAGE_SHIFT + 2)) | pgprot_val(prot))
arch/powerpc/include/asm/book3s/32/pgtable.h +2 -0
@@ -37,8 +37,10 @@ static inline bool pte_user(pte_t pte)*/ #ifdef CONFIG_PTE_64BIT #define PTE_RPN_MASK (~((1ULL << PTE_RPN_SHIFT) - 1)) +#define MAX_POSSIBLE_PHYSMEM_BITS 36#else #define PTE_RPN_MASK (~((1UL << PTE_RPN_SHIFT) - 1)) +#define MAX_POSSIBLE_PHYSMEM_BITS 32#endif /*
arch/powerpc/include/asm/book3s/64/kup-radix.h +2 -0
@@ -54,6 +54,8 @@#else /* !__ASSEMBLY__ */ +#include <linux/jump_label.h> +DECLARE_STATIC_KEY_FALSE (uaccess_flush_key);#ifdef CONFIG_PPC_KUAP
arch/powerpc/include/asm/nohash/32/pgtable.h +2 -0
@@ -148,8 +148,10 @@ int map_kernel_page(unsigned long va, phys_addr_t pa, pgprot_t prot);*/ #if defined(CONFIG_PPC32 ) && defined(CONFIG_PTE_64BIT )#define PTE_RPN_MASK (~((1ULL << PTE_RPN_SHIFT) - 1)) +#define MAX_POSSIBLE_PHYSMEM_BITS 36#else #define PTE_RPN_MASK (~((1UL << PTE_RPN_SHIFT) - 1)) +#define MAX_POSSIBLE_PHYSMEM_BITS 32#endif /*
arch/powerpc/kvm/book3s_xive_native.c +7 -0
@@ -252,6 +252,13 @@ static vm_fault_t xive_native_esb_fault(struct vm_fault *vmf) } state = &sb->irq_state[src]; + +/* Some sanity checking */ +if (!state->valid) { +pr_devel ("%s: source %lx invalid !\n" , __func__, irq); +return VM_FAULT_SIGBUS ; + } +kvmppc_xive_select_irq (state, &hw_num, &xd);arch_spin_lock (&sb->lock);
arch/riscv/include/asm/pgtable-32.h +2 -0
@@ -14,4 +14,6 @@#define PGDIR_SIZE (_AC(1, UL) << PGDIR_SHIFT)#define PGDIR_MASK (~(PGDIR_SIZE - 1)) +#define MAX_POSSIBLE_PHYSMEM_BITS 34 +#endif /* _ASM_RISCV_PGTABLE_32_H */
arch/x86/events/intel/cstate.c +3 -3
@@ -107,14 +107,14 @@MODULE_LICENSE ("GPL" );#define DEFINE_CSTATE_FORMAT_ATTR (_var, _name, _format) \ -static ssize_t __cstate_##_var##_show(struct kobject *kobj, \ - struct kobj_attribute *attr, \ +static ssize_t __cstate_##_var##_show(struct device *dev, \ + struct device_attribute *attr, \ char *page) \ { \ BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ return sprintf(page, _format "\n"); \ } \ -static struct kobj_attribute format_attr_##_var = \ +static struct device_attribute format_attr_##_var = \ __ATTR(_name, 0444, __cstate_##_var##_show, NULL) static ssize_t cstate_get_attr_cpumask(struct device *dev,
arch/x86/events/intel/uncore.c +2 -2
@@ -92,8 +92,8 @@ struct pci2phy_map *__find_pci2phy_map(int segment)return map; } -ssize_t uncore_event_show (struct kobject *kobj, -struct kobj_attribute *attr,char *buf) +ssize_t uncore_event_show (struct device *dev, +struct device_attribute *attr,char *buf) {struct uncore_event_desc *event = container_of(attr, struct uncore_event_desc, attr);
arch/x86/events/intel/uncore.h +6 -6
@@ -144,7 +144,7 @@ struct intel_uncore_box {#define UNCORE_BOX_FLAG_CFL8_CBOX_MSR_OFFS 2struct uncore_event_desc { -struct kobj_attribute attr; +struct device_attribute attr;const char *config; };
@@ -165,8 +165,8 @@ struct pci2phy_map {struct pci2phy_map *__find_pci2phy_map (int segment);int uncore_pcibus_to_physid (struct pci_bus *bus); -ssize_t uncore_event_show (struct kobject *kobj, -struct kobj_attribute *attr,char *buf); +ssize_t uncore_event_show (struct device *dev, +struct device_attribute *attr,char *buf);#define INTEL_UNCORE_EVENT_DESC (_name, _config) \ { \
@@ -175,14 +175,14 @@ ssize_t uncore_event_show(struct kobject *kobj, }#define DEFINE_UNCORE_FORMAT_ATTR (_var, _name, _format) \ -static ssize_t __uncore_##_var##_show(struct kobject *kobj, \ - struct kobj_attribute *attr, \ +static ssize_t __uncore_##_var##_show(struct device *dev, \ + struct device_attribute *attr, \ char *page) \ { \ BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ return sprintf(page, _format "\n"); \ } \ -static struct kobj_attribute format_attr_##_var = \ +static struct device_attribute format_attr_##_var = \ __ATTR(_name, 0444, __uncore_##_var##_show, NULL)static inline bool uncore_pmc_fixed (int idx)
arch/x86/events/rapl.c +1 -13
@@ -93,18 +93,6 @@ static const char *const rapl_domain_names[NR_RAPL_DOMAINS] __initconst = {* any other bit is reserved */ #define RAPL_EVENT_MASK 0xFFULL - -#define DEFINE_RAPL_FORMAT_ATTR (_var, _name, _format) \ -static ssize_t __rapl_##_var##_show(struct kobject *kobj, \ - struct kobj_attribute *attr, \ - char *page) \ -{ \ - BUILD_BUG_ON(sizeof(_format) >= PAGE_SIZE); \ - return sprintf(page, _format "\n"); \ -} \ -static struct kobj_attribute format_attr_##_var = \ - __ATTR(_name, 0444, __rapl_##_var##_show, NULL) -#define RAPL_CNTR_WIDTH 32#define RAPL_EVENT_ATTR_STR (_name, v, str) \
@@ -433,7 +421,7 @@ static struct attribute_group rapl_pmu_events_group = { .attrs = attrs_empty, }; -DEFINE_RAPL_FORMAT_ATTR (event, event,"config:0-7" ); +PMU_FORMAT_ATTR (event,"config:0-7" );static struct attribute *rapl_formats_attr[] = { &format_attr_event.attr,NULL ,
arch/x86/include/asm/kvm_host.h +1 -0
@@ -1560,6 +1560,7 @@ int kvm_test_age_hva(struct kvm *kvm, unsigned long hva);int kvm_set_spte_hva (struct kvm *kvm,unsigned long hva,pte_t pte);int kvm_cpu_has_injectable_intr (struct kvm_vcpu *v);int kvm_cpu_has_interrupt (struct kvm_vcpu *vcpu); +int kvm_cpu_has_extint (struct kvm_vcpu *v);int kvm_arch_interrupt_allowed (struct kvm_vcpu *vcpu);int kvm_cpu_get_interrupt (struct kvm_vcpu *v);void kvm_vcpu_reset (struct kvm_vcpu *vcpu,bool init_event);
arch/x86/kernel/cpu/bugs.c +2 -2
@@ -733,11 +733,13 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)if (boot_cpu_has (X86_FEATURE_IBPB )) {setup_force_cpu_cap (X86_FEATURE_USE_IBPB ); + spectre_v2_user_ibpb = mode;switch (cmd) {case SPECTRE_V2_USER_CMD_FORCE :case SPECTRE_V2_USER_CMD_PRCTL_IBPB :case SPECTRE_V2_USER_CMD_SECCOMP_IBPB :static_branch_enable (&switch_mm_always_ibpb); + spectre_v2_user_ibpb =SPECTRE_V2_USER_STRICT ;break ;case SPECTRE_V2_USER_CMD_PRCTL :case SPECTRE_V2_USER_CMD_AUTO :
@@ -751,8 +753,6 @@ spectre_v2_user_select_mitigation(enum spectre_v2_mitigation_cmd v2_cmd)pr_info ("mitigation: Enabling %s Indirect Branch Prediction Barrier\n" ,static_key_enabled (&switch_mm_always_ibpb) ?"always-on" :"conditional" ); - - spectre_v2_user_ibpb = mode; }/*
arch/x86/kernel/cpu/mce/core.c +4 -2
@@ -1361,8 +1361,10 @@ void do_machine_check(struct pt_regs *regs, long error_code)* When there's any problem use only local no_way_out state. */ if (!lmce) { -if (mce_end (order) <0 ) - no_way_out = worst >=MCE_PANIC_SEVERITY ; +if (mce_end (order) <0 ) { +if (!no_way_out) + no_way_out = worst >=MCE_PANIC_SEVERITY ; + } }else {/* * If there was a fatal machine check we should have
arch/x86/kernel/cpu/resctrl/rdtgroup.c +26 -39
166 lines not on this page · raw message
arch/x86/kvm/irq.c +34 -51
118 lines not on this page · raw message
arch/x86/kvm/lapic.c +1 -1
@@ -2330,7 +2330,7 @@ int kvm_apic_has_interrupt(struct kvm_vcpu *vcpu)struct kvm_lapic *apic = vcpu->arch.apic;u32 ppr; -if (!kvm_apic_hw_enabled (apic)) +if (!kvm_apic_present (vcpu))return -1 ;__apic_update_ppr (apic, &ppr);
arch/x86/kvm/x86.c +10 -8
@@ -3624,21 +3624,23 @@ static int kvm_vcpu_ioctl_set_lapic(struct kvm_vcpu *vcpu,static int kvm_cpu_accept_dm_intr (struct kvm_vcpu *vcpu) { +/* +* We can accept userspace's request for interrupt injection +* as long as we have a place to store the interrupt number. +* The actual injection will happen when the CPU is able to +* deliver the interrupt. +*/ +if (kvm_cpu_has_extint (vcpu)) +return false; + +/* Acknowledging ExtINT does not happen if LINT0 is masked. */ return (!lapic_in_kernel (vcpu) ||kvm_apic_accept_pic_intr (vcpu)); } -/* -* if userspace requested an interrupt window, check that the -* interrupt window is open. -* -* No need to exit to userspace if we already have an interrupt queued. -*/ static int kvm_vcpu_ready_for_interrupt_injection (struct kvm_vcpu *vcpu) {return kvm_arch_interrupt_allowed (vcpu) && - !kvm_cpu_has_interrupt (vcpu) && - !kvm_event_needs_reinjection (vcpu) &&kvm_cpu_accept_dm_intr (vcpu); }
arch/x86/xen/spinlock.c +11 -1
@@ -93,10 +93,20 @@ void xen_init_lock_cpu(int cpu)void xen_uninit_lock_cpu (int cpu) { +int irq; +if (!xen_pvspin)return ; -unbind_from_irqhandler (per_cpu (lock_kicker_irq, cpu),NULL ); +/* +* When booting the kernel with 'mitigations=auto,nosmt', the secondary +* CPUs are not activated, and lock_kicker_irq is not initialized. +*/ + irq =per_cpu (lock_kicker_irq, cpu); +if (irq ==-1 ) +return ; + +unbind_from_irqhandler (irq,NULL );per_cpu (lock_kicker_irq, cpu) =-1 ;kfree (per_cpu (irq_name, cpu));per_cpu (irq_name, cpu) =NULL ;
arch/xtensa/include/asm/uaccess.h +1 -1
@@ -300,7 +300,7 @@ strncpy_from_user(char *dst, const char *src, long count) return -EFAULT; }#else -long strncpy_from_user (char *dst,const char *src,long count); +long strncpy_from_user (char *dst,const char __user *src,long count);#endif /*
drivers/bus/ti-sysc.c +3 -0
@@ -192,6 +192,9 @@ static int sysc_wait_softreset(struct sysc *ddata)u32 sysc_mask, syss_done, rstval;int syss_offset, error =0 ; +if (ddata->cap->regbits->srst_shift <0 ) +return 0 ; + syss_offset = ddata->offsets[SYSC_SYSSTATUS ]; sysc_mask =BIT (ddata->cap->regbits->srst_shift);
drivers/dma/pl330.c +1 -1
@@ -2793,7 +2793,7 @@ pl330_prep_dma_memcpy(struct dma_chan *chan, dma_addr_t dst,* If burst size is smaller than bus width then make sure we only * transfer one at a time to avoid a burst stradling an MFIFO entry. */ -if (desc->rqcfg.brst_size *8 < pl330->pcfg.data_bus_width) +if (burst *8 < pl330->pcfg.data_bus_width) desc->rqcfg.brst_len =1 ; desc->bytes_requested = len;
drivers/dma/xilinx/xilinx_dma.c +2 -2
@@ -454,8 +454,8 @@ struct xilinx_dma_device {#define to_dma_tx_descriptor (tx) \ container_of(tx, struct xilinx_dma_tx_descriptor, async_tx)#define xilinx_dma_poll_timeout (chan, reg, val, cond, delay_us, timeout_us) \ - readl_poll_timeout(chan->xdev->regs + chan->ctrl_offset + reg, val, \ - cond, delay_us, timeout_us) + readl_poll_timeout_atomic(chan->xdev->regs + chan->ctrl_offset + reg, \ + val, cond, delay_us, timeout_us)/* IO accessors */ static inline u32 dma_read (struct xilinx_dma_chan *chan,u32 reg)
drivers/firmware/efi/Kconfig +1 -1
@@ -216,7 +216,7 @@ config EFI_DEV_PATH_PARSER config EFI_EARLYCON def_bool y - depends on SERIAL_EARLYCON && !ARM && !IA64 + depends on EFI && SERIAL_EARLYCON && !ARM && !IA64 select FONT_SUPPORT select ARCH_USE_MEMREMAP_PROT
drivers/hid/hid-cypress.c +39 -5
70 lines not on this page · raw message
drivers/hid/hid-ids.h +9 -0
@@ -337,6 +337,8 @@#define USB_DEVICE_ID_CYPRESS_BARCODE_4 0xed81#define USB_DEVICE_ID_CYPRESS_TRUETOUCH 0xc001 +#define USB_DEVICE_ID_CYPRESS_VARMILO_VA104M_07B1 0X07b1 +#define USB_VENDOR_ID_DATA_MODUL 0x7374#define USB_VENDOR_ID_DATA_MODUL_EASYMAXTOUCH 0x1201
@@ -449,6 +451,10 @@#define USB_VENDOR_ID_FRUCTEL 0x25B6#define USB_DEVICE_ID_GAMETEL_MT_MODE 0x0002 +#define USB_VENDOR_ID_GAMEVICE 0x27F8 +#define USB_DEVICE_ID_GAMEVICE_GV186 0x0BBE +#define USB_DEVICE_ID_GAMEVICE_KISHI 0x0BBF +#define USB_VENDOR_ID_GAMERON 0x0810#define USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR 0x0001#define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR 0x0002
@@ -487,6 +493,7 @@#define USB_DEVICE_ID_PENPOWER 0x00f4#define USB_VENDOR_ID_GREENASIA 0x0e8f +#define USB_DEVICE_ID_GREENASIA_DUAL_SAT_ADAPTOR 0x3010#define USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD 0x3013#define USB_VENDOR_ID_GRETAGMACBETH 0x0971
@@ -743,6 +750,7 @@#define USB_VENDOR_ID_LOGITECH 0x046d#define USB_DEVICE_ID_LOGITECH_AUDIOHUB 0x0a0e#define USB_DEVICE_ID_LOGITECH_T651 0xb00c +#define USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD 0xb309#define USB_DEVICE_ID_LOGITECH_C007 0xc007#define USB_DEVICE_ID_LOGITECH_C077 0xc077#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
@@ -1292,6 +1300,7 @@#define USB_VENDOR_ID_UGTIZER 0x2179#define USB_DEVICE_ID_UGTIZER_TABLET_GP0610 0x0053 +#define USB_DEVICE_ID_UGTIZER_TABLET_GT5040 0x0077#define USB_VENDOR_ID_VIEWSONIC 0x0543#define USB_DEVICE_ID_VIEWSONIC_PD1011 0xe621
drivers/hid/hid-input.c +3 -0
@@ -319,6 +319,9 @@ static const struct hid_device_id hid_battery_quirks[] = { {HID_BLUETOOTH_DEVICE (USB_VENDOR_ID_ASUSTEK ,USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD ), HID_BATTERY_QUIRK_IGNORE }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, +USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD ), + HID_BATTERY_QUIRK_IGNORE }, {} };
drivers/hid/hid-ite.c +60 -1
85 lines not on this page · raw message
drivers/hid/hid-logitech-hidpp.c +6 -0
@@ -3789,6 +3789,9 @@ static const struct hid_device_id hidpp_devices[] = { {/* Keyboard MX5000 (Bluetooth-receiver in HID proxy mode) */ LDJ_DEVICE(0xb305), .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS }, + { /* Dinovo Edge (Bluetooth-receiver in HID proxy mode) */ + LDJ_DEVICE(0xb309), + .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS }, { /* Keyboard MX5500 (Bluetooth-receiver in HID proxy mode) */ LDJ_DEVICE(0xb30b), .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
@@ -3831,6 +3834,9 @@ static const struct hid_device_id hidpp_devices[] = { {/* MX5000 keyboard over Bluetooth */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb305), .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS }, + { /* Dinovo Edge keyboard over Bluetooth */ + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb309), + .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS }, { /* MX5500 keyboard over Bluetooth */ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb30b), .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS },
drivers/hid/hid-quirks.c +5 -0
@@ -83,7 +83,12 @@ static const struct hid_device_id hid_quirks[] = { { HID_USB_DEVICE(USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER), HID_QUIRK_NO_INIT_REPORTS }, { HID_USB_DEVICE(USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28), HID_QUIRK_NOGET }, { HID_USB_DEVICE(USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY), HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_SAT_ADAPTOR), HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD), HID_QUIRK_MULTI_INPUT }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_GV186), + HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_KISHI), + HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT },
drivers/hid/hid-sensor-hub.c +2 -1
@@ -483,7 +483,8 @@ static int sensor_hub_raw_event(struct hid_device *hdev,return 1 ; ptr = raw_data; - ptr++;/* Skip report id */ +if (report->id) + ptr++;/* Skip report id */ spin_lock_irqsave (&pdata->lock, flags);
drivers/hid/hid-uclogic-core.c +2 -0
@@ -385,6 +385,8 @@ static const struct hid_device_id uclogic_devices[] = { USB_DEVICE_ID_UCLOGIC_DRAWIMAGE_G3) }, { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_GP0610) }, + { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, + USB_DEVICE_ID_UGTIZER_TABLET_GT5040) }, { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_TABLET_G5) }, { HID_USB_DEVICE(USB_VENDOR_ID_UGEE,
drivers/hid/hid-uclogic-params.c +2 -0
@@ -997,6 +997,8 @@ int uclogic_params_init(struct uclogic_params *params,break ;case VID_PID (USB_VENDOR_ID_UGTIZER ,USB_DEVICE_ID_UGTIZER_TABLET_GP0610 ): +case VID_PID (USB_VENDOR_ID_UGTIZER , +USB_DEVICE_ID_UGTIZER_TABLET_GT5040 ):case VID_PID (USB_VENDOR_ID_UGEE ,USB_DEVICE_ID_UGEE_XPPEN_TABLET_G540 ): case VID_PID(USB_VENDOR_ID_UGEE,
drivers/infiniband/hw/hns/hns_roce_hw_v2.c +5 -4
@@ -2423,6 +2423,7 @@ static int hns_roce_v2_mw_write_mtpt(void *mb_buf, struct hns_roce_mw *mw)roce_set_bit (mpt_entry->byte_8_mw_cnt_en,V2_MPT_BYTE_8_R_INV_EN_S ,1 );roce_set_bit (mpt_entry->byte_8_mw_cnt_en,V2_MPT_BYTE_8_L_INV_EN_S ,1 ); +roce_set_bit (mpt_entry->byte_8_mw_cnt_en,V2_MPT_BYTE_8_LW_EN_S ,1 );roce_set_bit (mpt_entry->byte_12_mw_pa,V2_MPT_BYTE_12_PA_S ,0 );roce_set_bit (mpt_entry->byte_12_mw_pa,V2_MPT_BYTE_12_MR_MW_S ,1 );
@@ -4614,11 +4615,11 @@ static int hns_roce_v2_query_qp(struct ib_qp *ibqp, struct ib_qp_attr *qp_attr,V2_QPC_BYTE_28_AT_M , V2_QPC_BYTE_28_AT_S); qp_attr->retry_cnt =roce_get_field (context.byte_212_lsn, -V2_QPC_BYTE_212_RETRY_CNT_M , -V2_QPC_BYTE_212_RETRY_CNT_S ); +V2_QPC_BYTE_212_RETRY_NUM_INIT_M , +V2_QPC_BYTE_212_RETRY_NUM_INIT_S ); qp_attr->rnr_retry =roce_get_field (context.byte_244_rnr_rxack, -V2_QPC_BYTE_244_RNR_CNT_M , -V2_QPC_BYTE_244_RNR_CNT_S ); +V2_QPC_BYTE_244_RNR_NUM_INIT_M , +V2_QPC_BYTE_244_RNR_NUM_INIT_S ); done: qp_attr->cur_qp_state = qp_attr->qp_state;
drivers/infiniband/hw/mthca/mthca_cq.c +6 -4
@@ -803,8 +803,10 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, } mailbox =mthca_alloc_mailbox (dev,GFP_KERNEL ); -if (IS_ERR (mailbox)) +if (IS_ERR (mailbox)) { + err =PTR_ERR (mailbox); goto err_out_arm; + } cq_context = mailbox->buf;
@@ -846,9 +848,9 @@ int mthca_init_cq(struct mthca_dev *dev, int nent, }spin_lock_irq (&dev->cq_table.lock); -if (mthca_array_set (&dev->cq_table.cq, - cq->cqn & (dev->limits.num_cqs -1 ), - cq)) { + err =mthca_array_set (&dev->cq_table.cq, + cq->cqn & (dev->limits.num_cqs -1 ), cq); +if (err) {spin_unlock_irq (&dev->cq_table.lock); goto err_out_free_mr; }
drivers/input/serio/i8042.c +11 -1
@@ -121,6 +121,7 @@ module_param_named(unmask_kbd_data, i8042_unmask_kbd_data, bool, 0600);MODULE_PARM_DESC (unmask_kbd_data,"Unconditional enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-condition: i8042.debug=1 enabled]" );#endif +static bool i8042_present;static bool i8042_bypass_aux_irq_test;static char i8042_kbd_firmware_id[128 ];static char i8042_aux_firmware_id[128 ];
@@ -341,6 +342,9 @@ int i8042_command(unsigned char *param, int command)unsigned long flags;int retval; +if (!i8042_present) +return -1 ; +spin_lock_irqsave (&i8042_lock, flags); retval =__i8042_command (param, command);spin_unlock_irqrestore (&i8042_lock, flags);
@@ -1609,12 +1613,15 @@ static int __init i8042_init(void) err =i8042_platform_init ();if (err) -return err; +return (err == -ENODEV ) ?0 : err; err =i8042_controller_check ();if (err) goto err_platform_exit; +/* Set this before creating the dev to allow i8042_command to work right away */ + i8042_present = true; + pdev =platform_create_bundle (&i8042_driver, i8042_probe,NULL ,0 ,NULL ,0 );if (IS_ERR (pdev)) { err =PTR_ERR (pdev);
@@ -1633,6 +1640,9 @@ static int __init i8042_init(void) static void __exit i8042_exit(void) { +if (!i8042_present) +return ; +platform_device_unregister (i8042_platform_device);platform_driver_unregister (&i8042_driver);i8042_platform_exit ();
drivers/irqchip/irq-sni-exiu.c +1 -1
@@ -136,7 +136,7 @@ static int exiu_domain_translate(struct irq_domain *domain,if (fwspec->param_count !=2 )return -EINVAL ; *hwirq = fwspec->param[0 ]; - *type = fwspec->param[2 ] &IRQ_TYPE_SENSE_MASK ; + *type = fwspec->param[1 ] &IRQ_TYPE_SENSE_MASK ; }return 0 ; }
drivers/net/can/m_can/m_can.c +2 -2
@@ -990,7 +990,7 @@ static const struct can_bittiming_const m_can_bittiming_const_31X = { .name = KBUILD_MODNAME, .tseg1_min = 2, /* Time segment 1 = prop_seg + phase_seg1 */ .tseg1_max = 256, - .tseg2_min = 1, /* Time segment 2 = phase_seg2 */ + .tseg2_min = 2, /* Time segment 2 = phase_seg2 */ .tseg2_max = 128, .sjw_max = 128, .brp_min = 1,
@@ -1605,7 +1605,7 @@ static int m_can_open(struct net_device *dev)INIT_WORK (&cdev->tx_work, m_can_tx_work_queue); err =request_threaded_irq (dev->irq,NULL , m_can_isr, -IRQF_ONESHOT |IRQF_TRIGGER_FALLING , +IRQF_ONESHOT , dev->name, dev); }else { err = request_irq(dev->irq, m_can_isr, IRQF_SHARED, dev->name,
drivers/net/can/usb/gs_usb.c +70 -61
265 lines not on this page · raw message
drivers/net/dsa/mv88e6xxx/chip.c +2 -0
@@ -2143,6 +2143,8 @@ static void mv88e6xxx_hardware_reset(struct mv88e6xxx_chip *chip)usleep_range (10000 ,20000 );gpiod_set_value_cansleep (gpiod,0 );usleep_range (10000 ,20000 ); + +mv88e6xxx_g1_wait_eeprom_done (chip); } }
drivers/net/dsa/mv88e6xxx/global1.c +31 -0
@@ -75,6 +75,37 @@ static int mv88e6xxx_g1_wait_init_ready(struct mv88e6xxx_chip *chip)return mv88e6xxx_g1_wait_bit (chip,MV88E6XXX_G1_STS , bit,1 ); } +void mv88e6xxx_g1_wait_eeprom_done (struct mv88e6xxx_chip *chip) +{ +const unsigned long timeout = jiffies +1 *HZ ; +u16 val; +int err; + +/* Wait up to 1 second for the switch to finish reading the +* EEPROM. +*/ +while (time_before (jiffies, timeout)) { + err =mv88e6xxx_g1_read (chip,MV88E6XXX_G1_STS , &val); +if (err) { +dev_err (chip->dev,"Error reading status" ); +return ; + } + +/* If the switch is still resetting, it may not +* respond on the bus, and so MDIO read returns +* 0xffff. Differentiate between that, and waiting for +* the EEPROM to be done by bit 0 being set. +*/ +if (val !=0xffff && + val &BIT (MV88E6XXX_G1_STS_IRQ_EEPROM_DONE )) +return ; + +usleep_range (1000 ,2000 ); + } + +dev_err (chip->dev,"Timeout waiting for EEPROM done" ); +} +/* Offset 0x01: Switch MAC Address Register Bytes 0 & 1 * Offset 0x02: Switch MAC Address Register Bytes 2 & 3 * Offset 0x03: Switch MAC Address Register Bytes 4 & 5
drivers/net/dsa/mv88e6xxx/global1.h +1 -0
@@ -277,6 +277,7 @@ int mv88e6xxx_g1_set_switch_mac(struct mv88e6xxx_chip *chip, u8 *addr);int mv88e6185_g1_reset (struct mv88e6xxx_chip *chip);int mv88e6352_g1_reset (struct mv88e6xxx_chip *chip);int mv88e6250_g1_reset (struct mv88e6xxx_chip *chip); +void mv88e6xxx_g1_wait_eeprom_done (struct mv88e6xxx_chip *chip);int mv88e6185_g1_ppu_enable (struct mv88e6xxx_chip *chip);int mv88e6185_g1_ppu_disable (struct mv88e6xxx_chip *chip);
drivers/net/ethernet/amazon/ena/ena_netdev.c +8 -9
@@ -2622,16 +2622,9 @@ static int ena_device_init(struct ena_com_dev *ena_dev, struct pci_dev *pdev, goto err_mmio_read_less; } - rc =pci_set_dma_mask (pdev,DMA_BIT_MASK (dma_width)); + rc =dma_set_mask_and_coherent (dev,DMA_BIT_MASK (dma_width));if (rc) { -dev_err (dev,"pci_set_dma_mask failed 0x%x\n" , rc); - goto err_mmio_read_less; - } - - rc =pci_set_consistent_dma_mask (pdev,DMA_BIT_MASK (dma_width)); -if (rc) { -dev_err (dev,"err_pci_set_consistent_dma_mask failed 0x%x\n" , - rc); +dev_err (dev,"dma_set_mask_and_coherent failed %d\n" , rc); goto err_mmio_read_less; }
@@ -3450,6 +3443,12 @@ static int ena_probe(struct pci_dev *pdev, const struct pci_device_id *ent)return rc; } + rc =dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (ENA_MAX_PHYS_ADDR_SIZE_BITS )); +if (rc) { +dev_err (&pdev->dev,"dma_set_mask_and_coherent failed %d\n" , rc); + goto err_disable_device; + } +pci_set_master (pdev); ena_dev =vzalloc (sizeof (*ena_dev));
drivers/net/ethernet/broadcom/bnxt/bnxt.c +3 -1
@@ -10826,7 +10826,8 @@ static int bnxt_init_board(struct pci_dev *pdev, struct net_device *dev)if (dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (64 )) !=0 &&dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (32 )) !=0 ) {dev_err (&pdev->dev,"System does not support DMA, aborting\n" ); - goto init_err_disable; + rc = -EIO ; + goto init_err_release; }pci_set_master (pdev);
@@ -11892,6 +11893,7 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)create_singlethread_workqueue ("bnxt_pf_wq" );if (!bnxt_pf_wq) {dev_err (&pdev->dev,"Unable to create workqueue.\n" ); + rc = -ENOMEM ; goto init_err_pci_clean; } }
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c +2 -1
@@ -630,7 +630,8 @@ int set_filter_wr(struct adapter *adapter, int fidx)FW_FILTER_WR_OVLAN_VLD_V (f->fs.val.ovlan_vld) |FW_FILTER_WR_IVLAN_VLDM_V (f->fs.mask.ivlan_vld) | FW_FILTER_WR_OVLAN_VLDM_V(f->fs.mask.ovlan_vld)); - fwr->smac_sel = f->smt->idx; +if (f->fs.newsmac) + fwr->smac_sel = f->smt->idx; fwr->rx_chan_rx_rpl_iq =htons (FW_FILTER_WR_RX_CHAN_V (0 ) |FW_FILTER_WR_RX_RPL_IQ_V (adapter->sge.fw_evtq.abs_id));
drivers/net/ethernet/ibm/ibmvnic.c +13 -1
@@ -1994,8 +1994,11 @@ static int do_reset(struct ibmvnic_adapter *adapter,for (i =0 ; i < adapter->req_rx_queues; i++)napi_schedule (&adapter->napi[i]); -if (adapter->reset_reason !=VNIC_RESET_FAILOVER ) +if (adapter->reset_reason ==VNIC_RESET_FAILOVER || + adapter->reset_reason ==VNIC_RESET_MOBILITY ) {call_netdevice_notifiers (NETDEV_NOTIFY_PEERS , netdev); +call_netdevice_notifiers (NETDEV_RESEND_IGMP , netdev); + } rc =0 ;
@@ -2065,6 +2068,9 @@ static int do_hard_reset(struct ibmvnic_adapter *adapter,if (rc)return IBMVNIC_OPEN_FAILED ; +call_netdevice_notifiers (NETDEV_NOTIFY_PEERS , netdev); +call_netdevice_notifiers (NETDEV_RESEND_IGMP , netdev); +return 0 ; }
@@ -2761,6 +2767,9 @@ static int reset_sub_crq_queues(struct ibmvnic_adapter *adapter) {int i, rc; +if (!adapter->tx_scrq || !adapter->rx_scrq) +return -EINVAL ; +for (i =0 ; i < adapter->req_tx_queues; i++) {netdev_dbg (adapter->netdev,"Re-setting tx_scrq[%d]\n" , i); rc =reset_one_sub_crq_queue (adapter, adapter->tx_scrq[i]);
@@ -4768,6 +4777,9 @@ static int ibmvnic_reset_crq(struct ibmvnic_adapter *adapter) }while (rc ==H_BUSY ||H_IS_LONG_BUSY (rc));/* Clean out the queue */ +if (!crq->msgs) +return -EINVAL ; +memset (crq->msgs,0 ,PAGE_SIZE ); crq->cur =0 ; crq->active = false;
drivers/net/ethernet/intel/i40e/i40e.h +1 -0
@@ -150,6 +150,7 @@ enum i40e_state_t { __I40E_CLIENT_RESET, __I40E_VIRTCHNL_OP_PENDING, __I40E_RECOVERY_MODE, + __I40E_VF_RESETS_DISABLED,/* disable resets during i40e_remove */ /* This must be last as it determines the size of the BITMAP */ __I40E_STATE_SIZE__, };
drivers/net/ethernet/intel/i40e/i40e_main.c +15 -7
@@ -3988,8 +3988,16 @@ static irqreturn_t i40e_intr(int irq, void *data) }if (icr0 &I40E_PFINT_ICR0_VFLR_MASK ) { - ena_mask &= ~I40E_PFINT_ICR0_ENA_VFLR_MASK ; -set_bit (__I40E_VFLR_EVENT_PENDING, pf->state); +/* disable any further VFLR event notifications */ +if (test_bit (__I40E_VF_RESETS_DISABLED, pf->state)) { +u32 reg =rd32 (hw,I40E_PFINT_ICR0_ENA ); + + reg &= ~I40E_PFINT_ICR0_VFLR_MASK ; +wr32 (hw,I40E_PFINT_ICR0_ENA , reg); + }else { + ena_mask &= ~I40E_PFINT_ICR0_ENA_VFLR_MASK ; +set_bit (__I40E_VFLR_EVENT_PENDING, pf->state); + } }if (icr0 &I40E_PFINT_ICR0_GRST_MASK ) {
@@ -15345,6 +15353,11 @@ static void i40e_remove(struct pci_dev *pdev)while (test_bit (__I40E_RESET_RECOVERY_PENDING, pf->state))usleep_range (1000 ,2000 ); +if (pf->flags &I40E_FLAG_SRIOV_ENABLED ) { +set_bit (__I40E_VF_RESETS_DISABLED, pf->state); +i40e_free_vfs (pf); + pf->flags &= ~I40E_FLAG_SRIOV_ENABLED ; + }/* no more scheduling of any task */ set_bit (__I40E_SUSPENDED, pf->state);set_bit (__I40E_DOWN, pf->state);
@@ -15371,11 +15384,6 @@ static void i40e_remove(struct pci_dev *pdev)*/ i40e_notify_client_of_netdev_close (pf->vsi[pf->lan_vsi], false); -if (pf->flags &I40E_FLAG_SRIOV_ENABLED ) { -i40e_free_vfs (pf); - pf->flags &= ~I40E_FLAG_SRIOV_ENABLED ; - } -i40e_fdir_teardown (pf);/* If there is a switch structure or any orphans, remove them.
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +15 -11
@@ -1335,7 +1335,8 @@ static void i40e_cleanup_reset_vf(struct i40e_vf *vf)* @vf: pointer to the VF structure * @flr: VFLR was issued or not * -* Returns true if the VF is reset, false otherwise. +* Returns true if the VF is in reset, resets successfully, or resets +* are disabled and false otherwise. **/ bool i40e_reset_vf (struct i40e_vf *vf,bool flr) {
@@ -1345,11 +1346,14 @@ bool i40e_reset_vf(struct i40e_vf *vf, bool flr)u32 reg;int i; +if (test_bit (__I40E_VF_RESETS_DISABLED, pf->state)) +return true; +/* If the VFs have been disabled, this means something else is * resetting the VF, so we shouldn't continue. */ if (test_and_set_bit (__I40E_VF_DISABLE, pf->state)) -return false; +return true;i40e_trigger_vf_reset (vf, flr);
@@ -1513,6 +1517,15 @@ void i40e_free_vfs(struct i40e_pf *pf)i40e_notify_client_of_vf_enable (pf,0 ); +/* Disable IOV before freeing resources. This lets any VF drivers +* running in the host get themselves cleaned up before we yank +* the carpet out from underneath their feet. +*/ +if (!pci_vfs_assigned (pf->pdev)) +pci_disable_sriov (pf->pdev); +else +dev_warn (&pf->pdev->dev,"VFs are assigned - not disabling SR-IOV\n" ); +/* Amortize wait time by stopping all VFs at the same time */ for (i =0 ; i < pf->num_alloc_vfs; i++) {if (test_bit (I40E_VF_STATE_INIT , &pf->vf[i].vf_states))
@@ -1528,15 +1541,6 @@ void i40e_free_vfs(struct i40e_pf *pf)i40e_vsi_wait_queues_disabled (pf->vsi[pf->vf[i].lan_vsi_idx]); } -/* Disable IOV before freeing resources. This lets any VF drivers -* running in the host get themselves cleaned up before we yank -* the carpet out from underneath their feet. -*/ -if (!pci_vfs_assigned (pf->pdev)) -pci_disable_sriov (pf->pdev); -else -dev_warn (&pf->pdev->dev,"VFs are assigned - not disabling SR-IOV\n" ); -/* free up VF resources */ tmp = pf->num_alloc_vfs; pf->num_alloc_vfs =0 ;
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c +3 -0
@@ -3069,6 +3069,9 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw, goto out_unlock; } +if (vif->type ==NL80211_IFTYPE_STATION ) + vif->bss_conf.he_support = sta->he_cap.has_he; + if (sta->tdls && (vif->p2p || iwl_mvm_tdls_sta_count(mvm, NULL) ==
drivers/nfc/s3fwrn5/i2c.c +2 -2
@@ -26,8 +26,8 @@ struct s3fwrn5_i2c_phy {struct i2c_client *i2c_dev;struct nci_dev *ndev; -unsigned int gpio_en; -unsigned int gpio_fw_wake; +int gpio_en; +int gpio_fw_wake;struct mutex mutex;
drivers/nvme/host/pci.c +15 -0
@@ -271,9 +271,21 @@ static void nvme_dbbuf_init(struct nvme_dev *dev, nvmeq->dbbuf_cq_ei = &dev->dbbuf_eis[cq_idx (qid, dev->db_stride)]; } +static void nvme_dbbuf_free (struct nvme_queue *nvmeq) +{ +if (!nvmeq->qid) +return ; + + nvmeq->dbbuf_sq_db =NULL ; + nvmeq->dbbuf_cq_db =NULL ; + nvmeq->dbbuf_sq_ei =NULL ; + nvmeq->dbbuf_cq_ei =NULL ; +} +static void nvme_dbbuf_set (struct nvme_dev *dev) {struct nvme_command c; +unsigned int i;if (!dev->dbbuf_dbs)return ;
@@ -287,6 +299,9 @@ static void nvme_dbbuf_set(struct nvme_dev *dev)dev_warn (dev->ctrl.device,"unable to set dbbuf\n" );/* Free memory and continue on */ nvme_dbbuf_dma_free (dev); + +for (i =1 ; i <= dev->online_queues; i++) +nvme_dbbuf_free (&dev->queues[i]); } }
drivers/phy/tegra/xusb.c +1 -0
@@ -949,6 +949,7 @@ static int tegra_xusb_padctl_probe(struct platform_device *pdev) reset:reset_control_assert (padctl->rst); remove: +platform_set_drvdata (pdev,NULL ); soc->ops->remove (padctl);return err; }
drivers/platform/x86/thinkpad_acpi.c +1 -0
@@ -4238,6 +4238,7 @@ static void hotkey_resume(void)pr_err ("error while attempting to reset the event firmware interface\n" );tpacpi_send_radiosw_update (); +tpacpi_input_send_tabletsw ();hotkey_tablet_mode_notify_change ();hotkey_wakeup_reason_notify_change ();hotkey_wakeup_hotunplug_complete_notify_change ();
drivers/platform/x86/toshiba_acpi.c +1 -2
@@ -1485,7 +1485,7 @@ static ssize_t video_proc_write(struct file *file, const char __user *buf,struct toshiba_acpi_dev *dev =PDE_DATA (file_inode (file));char *buffer;char *cmd; -int lcd_out, crt_out, tv_out; +int lcd_out =-1 , crt_out =-1 , tv_out =-1 ;int remain = count;int value;int ret;
@@ -1517,7 +1517,6 @@ static ssize_t video_proc_write(struct file *file, const char __user *buf,kfree (cmd); - lcd_out = crt_out = tv_out =-1 ; ret =get_video_status (dev, &video_out);if (!ret) {unsigned int new_video_out = video_out;
drivers/s390/net/qeth_core.h +6 -3
@@ -436,10 +436,13 @@ enum qeth_qdio_out_buffer_state {QETH_QDIO_BUF_EMPTY ,/* Filled by driver; owned by hardware in order to be sent. */ QETH_QDIO_BUF_PRIMED , -/* Identified to be pending in TPQ. */ +/* Discovered by the TX completion code: */ QETH_QDIO_BUF_PENDING , -/* Found in completion queue. */ -QETH_QDIO_BUF_IN_CQ , +/* Finished by the TX completion code: */ +QETH_QDIO_BUF_NEED_QAOB , +/* Received QAOB notification on CQ: */ +QETH_QDIO_BUF_QAOB_OK , +QETH_QDIO_BUF_QAOB_ERROR ,/* Handled via transfer pending / completion queue. */ QETH_QDIO_BUF_HANDLED_DELAYED, };
drivers/s390/net/qeth_core_main.c +54 -28
132 lines not on this page · raw message
drivers/scsi/libiscsi.c +15 -8
@@ -533,8 +533,8 @@ static void iscsi_complete_task(struct iscsi_task *task, int state)if (conn->task == task) conn->task =NULL ; -if (conn->ping_task == task) - conn->ping_task =NULL ; +if (READ_ONCE (conn->ping_task) == task) +WRITE_ONCE (conn->ping_task,NULL );/* release get from queueing */ __iscsi_put_task (task);
@@ -738,6 +738,9 @@ __iscsi_conn_send_pdu(struct iscsi_conn *conn, struct iscsi_hdr *hdr, task->conn->session->age); } +if (unlikely (READ_ONCE (conn->ping_task) ==INVALID_SCSI_TASK )) +WRITE_ONCE (conn->ping_task, task); +if (!ihost->workq) {if (iscsi_prep_mgmt_task (conn, task)) goto free_task;
@@ -941,8 +944,11 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr)struct iscsi_nopout hdr;struct iscsi_task *task; -if (!rhdr && conn->ping_task) -return -EINVAL ; +if (!rhdr) { +if (READ_ONCE (conn->ping_task)) +return -EINVAL ; +WRITE_ONCE (conn->ping_task,INVALID_SCSI_TASK ); + }memset (&hdr,0 ,sizeof (struct iscsi_nopout )); hdr.opcode =ISCSI_OP_NOOP_OUT |ISCSI_OP_IMMEDIATE ;
@@ -957,11 +963,12 @@ static int iscsi_send_nopout(struct iscsi_conn *conn, struct iscsi_nopin *rhdr) task =__iscsi_conn_send_pdu (conn, (struct iscsi_hdr *)&hdr,NULL ,0 );if (!task) { +if (!rhdr) +WRITE_ONCE (conn->ping_task,NULL );iscsi_conn_printk (KERN_ERR , conn,"Could not send nopout\n" );return -EIO ; }else if (!rhdr) {/* only track our nops */ - conn->ping_task = task; conn->last_ping = jiffies; }
@@ -984,7 +991,7 @@ static int iscsi_nop_out_rsp(struct iscsi_task *task,struct iscsi_conn *conn = task->conn;int rc =0 ; -if (conn->ping_task != task) { +if (READ_ONCE (conn->ping_task) != task) {/* * If this is not in response to one of our * nops then it must be from userspace.
@@ -1923,7 +1930,7 @@ static void iscsi_start_tx(struct iscsi_conn *conn)*/ static int iscsi_has_ping_timed_out (struct iscsi_conn *conn) { -if (conn->ping_task && +if (READ_ONCE (conn->ping_task) &&time_before_eq (conn->last_recv + (conn->recv_timeout *HZ ) + (conn->ping_timeout *HZ ), jiffies))return 1 ;
@@ -2058,7 +2065,7 @@ enum blk_eh_timer_return iscsi_eh_cmd_timed_out(struct scsi_cmnd *sc)* Checking the transport already or nop from a cmd timeout still * running */ -if (conn->ping_task) { +if (READ_ONCE (conn->ping_task)) { task->have_checked_conn = true; rc =BLK_EH_RESET_TIMER ; goto done;
drivers/scsi/ufs/ufshcd.c +1 -5
@@ -8160,11 +8160,7 @@ int ufshcd_shutdown(struct ufs_hba *hba)if (ufshcd_is_ufs_dev_poweroff (hba) &&ufshcd_is_link_off (hba)) goto out; -if (pm_runtime_suspended (hba->dev)) { - ret =ufshcd_runtime_resume (hba); -if (ret) - goto out; - } +pm_runtime_get_sync (hba->dev); ret =ufshcd_suspend (hba,UFS_SHUTDOWN_PM ); out:
drivers/spi/spi-bcm-qspi.c +12 -22
@@ -1213,7 +1213,7 @@ int bcm_qspi_probe(struct platform_device *pdev,if (!of_match_node (bcm_qspi_of_match, dev->of_node))return -ENODEV ; - master =spi_alloc_master (dev,sizeof (struct bcm_qspi )); + master =devm_spi_alloc_master (dev,sizeof (struct bcm_qspi ));if (!master) {dev_err (dev,"error allocating spi_master\n" );return -ENOMEM ;
@@ -1252,21 +1252,17 @@ int bcm_qspi_probe(struct platform_device *pdev,if (res) { qspi->base[MSPI ] =devm_ioremap_resource (dev, res); -if (IS_ERR (qspi->base[MSPI ])) { - ret =PTR_ERR (qspi->base[MSPI ]); - goto qspi_resource_err; - } +if (IS_ERR (qspi->base[MSPI ])) +return PTR_ERR (qspi->base[MSPI ]); }else { - goto qspi_resource_err; +return 0 ; } res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"bspi" );if (res) { qspi->base[BSPI ] =devm_ioremap_resource (dev, res); -if (IS_ERR (qspi->base[BSPI ])) { - ret =PTR_ERR (qspi->base[BSPI ]); - goto qspi_resource_err; - } +if (IS_ERR (qspi->base[BSPI ])) +return PTR_ERR (qspi->base[BSPI ]); qspi->bspi_mode = true; }else { qspi->bspi_mode = false;
@@ -1277,18 +1273,14 @@ int bcm_qspi_probe(struct platform_device *pdev, res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"cs_reg" );if (res) { qspi->base[CHIP_SELECT ] =devm_ioremap_resource (dev, res); -if (IS_ERR (qspi->base[CHIP_SELECT ])) { - ret =PTR_ERR (qspi->base[CHIP_SELECT ]); - goto qspi_resource_err; - } +if (IS_ERR (qspi->base[CHIP_SELECT ])) +return PTR_ERR (qspi->base[CHIP_SELECT ]); } qspi->dev_ids =kcalloc (num_irqs,sizeof (struct bcm_qspi_dev_id ),GFP_KERNEL ); -if (!qspi->dev_ids) { - ret = -ENOMEM ; - goto qspi_resource_err; - } +if (!qspi->dev_ids) +return -ENOMEM ;for (val =0 ; val < num_irqs; val++) { irq =-1 ;
@@ -1357,7 +1349,7 @@ int bcm_qspi_probe(struct platform_device *pdev, qspi->xfer_mode.addrlen =-1 ; qspi->xfer_mode.hp =-1 ; - ret =devm_spi_register_master (&pdev->dev, master); + ret =spi_register_master (master);if (ret <0 ) {dev_err (dev,"can't register master\n" ); goto qspi_reg_err;
@@ -1370,8 +1362,6 @@ int bcm_qspi_probe(struct platform_device *pdev,clk_disable_unprepare (qspi->clk); qspi_probe_err:kfree (qspi->dev_ids); -qspi_resource_err: -spi_master_put (master);return ret; }/* probe function to be called by SoC specific platform driver probe */
@@ -1381,10 +1371,10 @@ int bcm_qspi_remove(struct platform_device *pdev) {struct bcm_qspi *qspi =platform_get_drvdata (pdev); +spi_unregister_master (qspi->master);bcm_qspi_hw_uninit (qspi);clk_disable_unprepare (qspi->clk);kfree (qspi->dev_ids); -spi_unregister_master (qspi->master);return 0 ; }
drivers/spi/spi-bcm2835.c +6 -12
@@ -1264,7 +1264,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)struct bcm2835_spi *bs;int err; - ctlr =spi_alloc_master (&pdev->dev,ALIGN (sizeof (*bs), + ctlr =devm_spi_alloc_master (&pdev->dev,ALIGN (sizeof (*bs),dma_get_cache_alignment ()));if (!ctlr)return -ENOMEM ;
@@ -1284,23 +1284,19 @@ static int bcm2835_spi_probe(struct platform_device *pdev) bs =spi_controller_get_devdata (ctlr); bs->regs =devm_platform_ioremap_resource (pdev,0 ); -if (IS_ERR (bs->regs)) { - err =PTR_ERR (bs->regs); - goto out_controller_put; - } +if (IS_ERR (bs->regs)) +return PTR_ERR (bs->regs); bs->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (bs->clk)) { err =PTR_ERR (bs->clk);dev_err (&pdev->dev,"could not get clk: %d\n" , err); - goto out_controller_put; +return err; } bs->irq =platform_get_irq (pdev,0 ); -if (bs->irq <=0 ) { - err = bs->irq ? bs->irq : -ENODEV ; - goto out_controller_put; - } +if (bs->irq <=0 ) +return bs->irq ? bs->irq : -ENODEV ;clk_prepare_enable (bs->clk);
@@ -1330,8 +1326,6 @@ static int bcm2835_spi_probe(struct platform_device *pdev) out_clk_disable:clk_disable_unprepare (bs->clk); -out_controller_put: -spi_controller_put (ctlr);return err; }
drivers/spi/spi-bcm2835aux.c +2 -1
@@ -529,8 +529,9 @@ static int bcm2835aux_spi_probe(struct platform_device *pdev) bs->clk =devm_clk_get (&pdev->dev,NULL );if (IS_ERR (bs->clk)) { + err =PTR_ERR (bs->clk);dev_err (&pdev->dev,"could not get clk: %d\n" , err); -return PTR_ERR (bs->clk); +return err; } bs->irq =platform_get_irq (pdev,0 );
drivers/staging/ralink-gdma/Kconfig +1 -0
@@ -2,6 +2,7 @@ config DMA_RALINK tristate "RALINK DMA support" depends on RALINK && !SOC_RT288X + depends on DMADEVICES select DMA_ENGINE select DMA_VIRTUAL_CHANNELS
drivers/target/iscsi/iscsi_target.c +13 -4
@@ -483,8 +483,7 @@ EXPORT_SYMBOL(iscsit_queue_rsp);void iscsit_aborted_task (struct iscsi_conn *conn,struct iscsi_cmd *cmd) {spin_lock_bh (&conn->cmd_lock); -if (!list_empty (&cmd->i_conn_node) && - !(cmd->se_cmd.transport_state &CMD_T_FABRIC_STOP )) +if (!list_empty (&cmd->i_conn_node))list_del_init (&cmd->i_conn_node);spin_unlock_bh (&conn->cmd_lock);
@@ -4082,12 +4081,22 @@ static void iscsit_release_commands_from_conn(struct iscsi_conn *conn)spin_lock_bh (&conn->cmd_lock);list_splice_init (&conn->conn_cmd_list, &tmp_list); -list_for_each_entry (cmd, &tmp_list, i_conn_node) { +list_for_each_entry_safe (cmd, cmd_tmp, &tmp_list, i_conn_node) {struct se_cmd *se_cmd = &cmd->se_cmd;if (se_cmd->se_tfo !=NULL ) {spin_lock_irq (&se_cmd->t_state_lock); - se_cmd->transport_state |=CMD_T_FABRIC_STOP ; +if (se_cmd->transport_state &CMD_T_ABORTED ) { +/* +* LIO's abort path owns the cleanup for this, +* so put it back on the list and let +* aborted_task handle it. +*/ +list_move_tail (&cmd->i_conn_node, + &conn->conn_cmd_list); + }else { + se_cmd->transport_state |=CMD_T_FABRIC_STOP ; + }spin_unlock_irq (&se_cmd->t_state_lock); } }
drivers/tee/optee/call.c +2 -1
@@ -530,7 +530,8 @@ void optee_free_pages_list(void *list, size_t num_entries)static bool is_normal_memory (pgprot_t p) {#if defined(CONFIG_ARM ) -return (pgprot_val (p) &L_PTE_MT_MASK ) ==L_PTE_MT_WRITEALLOC ; +return (((pgprot_val (p) &L_PTE_MT_MASK ) ==L_PTE_MT_WRITEALLOC ) || + ((pgprot_val (p) &L_PTE_MT_MASK ) ==L_PTE_MT_WRITEBACK ));#elif defined(CONFIG_ARM64 )return (pgprot_val (p) &PTE_ATTRINDX_MASK ) ==PTE_ATTRINDX (MT_NORMAL );#else
drivers/usb/core/devio.c +7 -7
@@ -482,11 +482,11 @@ static void snoop_urb(struct usb_device *udev,if (userurb) {/* Async */ if (when ==SUBMIT ) -dev_info (&udev->dev,"userurb %pK, ep%d %s-%s, " +dev_info (&udev->dev,"userurb %px, ep%d %s-%s, " "length %u\n" , userurb, ep, t, d, length);else -dev_info (&udev->dev,"userurb %pK, ep%d %s-%s, " +dev_info (&udev->dev,"userurb %px, ep%d %s-%s, " "actual_length %u status %d\n" , userurb, ep, t, d, length, timeout_or_status);
@@ -1992,7 +1992,7 @@ static int proc_reapurb(struct usb_dev_state *ps, void __user *arg)if (as) {int retval; -snoop (&ps->dev->dev,"reap %pK\n" , as->userurb); +snoop (&ps->dev->dev,"reap %px\n" , as->userurb); retval =processcompl (as, (void __user *__user *)arg);free_async (as);return retval;
@@ -2009,7 +2009,7 @@ static int proc_reapurbnonblock(struct usb_dev_state *ps, void __user *arg) as =async_getcompleted (ps);if (as) { -snoop (&ps->dev->dev,"reap %pK\n" , as->userurb); +snoop (&ps->dev->dev,"reap %px\n" , as->userurb); retval =processcompl (as, (void __user *__user *)arg);free_async (as); }else {
@@ -2139,7 +2139,7 @@ static int proc_reapurb_compat(struct usb_dev_state *ps, void __user *arg)if (as) {int retval; -snoop (&ps->dev->dev,"reap %pK\n" , as->userurb); +snoop (&ps->dev->dev,"reap %px\n" , as->userurb); retval =processcompl_compat (as, (void __user *__user *)arg);free_async (as);return retval;
@@ -2156,7 +2156,7 @@ static int proc_reapurbnonblock_compat(struct usb_dev_state *ps, void __user *ar as =async_getcompleted (ps);if (as) { -snoop (&ps->dev->dev,"reap %pK\n" , as->userurb); +snoop (&ps->dev->dev,"reap %px\n" , as->userurb); retval =processcompl_compat (as, (void __user *__user *)arg);free_async (as); }else {
@@ -2621,7 +2621,7 @@ static long usbdev_do_ioctl(struct file *file, unsigned int cmd,#endif case USBDEVFS_DISCARDURB : -snoop (&dev->dev,"%s: DISCARDURB %pK\n" , __func__, p); +snoop (&dev->dev,"%s: DISCARDURB %px\n" , __func__, p); ret =proc_unlinkurb (ps, p);break ;
drivers/usb/core/quirks.c +10 -0
@@ -348,6 +348,10 @@ static const struct usb_device_id usb_quirk_list[] = {/* Guillemot Webcam Hercules Dualpix Exchange*/ { USB_DEVICE(0x06f8, 0x3005), .driver_info = USB_QUIRK_RESET_RESUME }, + /* Guillemot Hercules DJ Console audio card (BZ 208357) */ + { USB_DEVICE(0x06f8, 0xb000), .driver_info = + USB_QUIRK_ENDPOINT_BLACKLIST }, + /* Midiman M-Audio Keystation 88es */ { USB_DEVICE(0x0763, 0x0192), .driver_info = USB_QUIRK_RESET_RESUME },
@@ -421,6 +425,10 @@ static const struct usb_device_id usb_quirk_list[] = { { USB_DEVICE(0x1532, 0x0116), .driver_info = USB_QUIRK_LINEAR_UFRAME_INTR_BINTERVAL }, + /* Lenovo ThinkCenter A630Z TI024Gen3 usb-audio */ + { USB_DEVICE(0x17ef, 0xa012), .driver_info = + USB_QUIRK_DISCONNECT_SUSPEND }, + /* BUILDWIN Photo Frame */ { USB_DEVICE(0x1908, 0x1315), .driver_info = USB_QUIRK_HONOR_BNUMINTERFACES },
@@ -521,6 +529,8 @@ static const struct usb_device_id usb_amd_resume_quirk_list[] = {* Matched for devices with USB_QUIRK_ENDPOINT_BLACKLIST. */ static const struct usb_device_id usb_endpoint_blacklist[] = { + {USB_DEVICE_INTERFACE_NUMBER (0x06f8 ,0xb000 ,5 ), .driver_info =0x01 }, + {USB_DEVICE_INTERFACE_NUMBER (0x06f8 ,0xb000 ,5 ), .driver_info =0x81 }, {USB_DEVICE_INTERFACE_NUMBER (0x0926 ,0x0202 ,1 ), .driver_info =0x85 }, {USB_DEVICE_INTERFACE_NUMBER (0x0926 ,0x0208 ,1 ), .driver_info =0x85 }, { }
drivers/usb/gadget/function/f_midi.c +7 -3
@@ -1315,7 +1315,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi) midi->id =kstrdup (opts->id,GFP_KERNEL );if (opts->id && !midi->id) { status = -ENOMEM ; - goto setup_fail; + goto midi_free; } midi->in_ports = opts->in_ports; midi->out_ports = opts->out_ports;
@@ -1327,7 +1327,7 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi) status =kfifo_alloc (&midi->in_req_fifo, midi->qlen,GFP_KERNEL );if (status) - goto setup_fail; + goto midi_free;spin_lock_init (&midi->transmit_lock);
@@ -1343,9 +1343,13 @@ static struct usb_function *f_midi_alloc(struct usb_function_instance *fi)return &midi->func; +midi_free: +if (midi) +kfree (midi->id); +kfree (midi); setup_fail:mutex_unlock (&opts->lock); -kfree (midi); +return ERR_PTR (status); }
drivers/usb/gadget/legacy/inode.c +3 -0
@@ -2040,6 +2040,9 @@ gadgetfs_fill_super (struct super_block *sb, struct fs_context *fc)return 0 ; Enomem: +kfree (CHIP ); +CHIP =NULL ; +return -ENOMEM ; }
drivers/vhost/scsi.c +15 -27
85 lines not on this page · raw message
drivers/video/fbdev/hyperv_fb.c +6 -1
@@ -703,7 +703,12 @@ static int hvfb_getmem(struct hv_device *hdev, struct fb_info *info) goto err1; } - fb_virt =ioremap (par->mem->start, screen_fb_size); +/* +* Map the VRAM cacheable for performance. This is also required for +* VM Connect to display properly for ARM64 Linux VM, as the host also +* maps the VRAM cacheable. +*/ + fb_virt =ioremap_cache (par->mem->start, screen_fb_size);if (!fb_virt) goto err2;
fs/btrfs/qgroup.c +1 -1
@@ -488,13 +488,13 @@ int btrfs_read_qgroup_config(struct btrfs_fs_info *fs_info)break ; } out: +btrfs_free_path (path); fs_info->qgroup_flags |= flags;if (!(fs_info->qgroup_flags &BTRFS_QGROUP_STATUS_FLAG_ON ))clear_bit (BTRFS_FS_QUOTA_ENABLED , &fs_info->flags);else if (fs_info->qgroup_flags &BTRFS_QGROUP_STATUS_FLAG_RESCAN && ret >=0 ) ret =qgroup_rescan_init (fs_info, rescan_progress,0 ); -btrfs_free_path (path);if (ret <0 ) {ulist_free (fs_info->qgroup_ulist);
fs/btrfs/tree-checker.c +3 -0
@@ -913,6 +913,7 @@ static int check_root_item(struct extent_buffer *leaf, struct btrfs_key *key,"invalid root item size, have %u expect %zu or %u" ,btrfs_item_size_nr (leaf, slot),sizeof (ri), btrfs_legacy_root_item_size()); +return -EUCLEAN ; }/*
@@ -1268,6 +1269,7 @@ static int check_extent_data_ref(struct extent_buffer *leaf,"invalid item size, have %u expect aligned to %zu for key type %u" ,btrfs_item_size_nr (leaf, slot), sizeof(*dref), key->type); +return -EUCLEAN ; }if (!IS_ALIGNED (key->objectid, leaf->fs_info->sectorsize)) { generic_err(leaf, slot,
@@ -1296,6 +1298,7 @@ static int check_extent_data_ref(struct extent_buffer *leaf,extent_err (leaf, slot,"invalid extent data backref offset, have %llu expect aligned to %u" , offset, leaf->fs_info->sectorsize); +return -EUCLEAN ; } }return 0 ;
fs/btrfs/volumes.c +7 -1
@@ -1122,7 +1122,13 @@ static noinline struct btrfs_device *device_list_add(const char *path,if (device->bdev != path_bdev) {bdput (path_bdev);mutex_unlock (&fs_devices->device_list_mutex); - btrfs_warn_in_rcu(device->fs_info, +/* +* device->fs_info may not be reliable here, so +* pass in a NULL instead. This avoids a +* possible use-after-free when the fs_info and +* fs_info->sb are already torn down. +*/ + btrfs_warn_in_rcu(NULL, "duplicate device %s devid %llu generation %llu scanned by %s (%d)", path, devid, found_transid, current->comm,
fs/cifs/cifsacl.c +1 -0
@@ -1198,6 +1198,7 @@ cifs_acl_to_fattr(struct cifs_sb_info *cifs_sb, struct cifs_fattr *fattr,cifs_dbg (VFS ,"%s: error %d getting sec desc\n" , __func__, rc); }else if (mode_from_special_sid) { rc =parse_sec_desc (cifs_sb, pntsd, acllen, fattr, true); +kfree (pntsd); }else {/* get approximated mode from ACL */ rc =parse_sec_desc (cifs_sb, pntsd, acllen, fattr, false);
fs/cifs/smb2ops.c +73 -15
184 lines not on this page · raw message
fs/efivarfs/inode.c +2 -0
@@ -7,6 +7,7 @@#include <linux/efi.h> #include <linux/fs.h> #include <linux/ctype.h> +#include <linux/kmemleak.h> #include <linux/slab.h> #include <linux/uuid.h>
@@ -103,6 +104,7 @@ static int efivarfs_create(struct inode *dir, struct dentry *dentry, var->var.VariableName[i] ='\0' ; inode->i_private = var; +kmemleak_ignore (var); err =efivar_entry_add (var, &efivarfs_list);if (err)
fs/efivarfs/super.c +0 -1
@@ -21,7 +21,6 @@ LIST_HEAD(efivarfs_list);static void efivarfs_evict_inode (struct inode *inode) {clear_inode (inode); -kfree (inode->i_private); }static const struct super_operations efivarfs_ops = {
fs/proc/self.c +7 -0
@@ -16,6 +16,13 @@ static const char *proc_self_get_link(struct dentry *dentry,pid_t tgid =task_tgid_nr_ns (current, ns);char *name; +/* +* Not currently supported. Once we can inherit all of struct pid, +* we can allow this. +*/ +if (current->flags &PF_KTHREAD ) +return ERR_PTR (-EOPNOTSUPP ); +if (!tgid)return ERR_PTR (-ENOENT );/* max length of unsigned int in decimal + NULL term */
include/asm-generic/pgtable.h +13 -0
@@ -1159,6 +1159,19 @@ static inline bool arch_has_pfn_modify_check(void)#endif /* !__ASSEMBLY__ */ +#if !defined(MAX_POSSIBLE_PHYSMEM_BITS ) && !defined(CONFIG_64BIT ) +#ifdef CONFIG_PHYS_ADDR_T_64BIT +/* +* ZSMALLOC needs to know the highest PFN on 32-bit architectures +* with physical address space extension, but falls back to +* BITS_PER_LONG otherwise. +*/ +#error Missing MAX_POSSIBLE_PHYSMEM_BITS definition +#else +#define MAX_POSSIBLE_PHYSMEM_BITS 32 +#endif +#endif +#ifndef has_transparent_hugepage#ifdef CONFIG_TRANSPARENT_HUGEPAGE #define has_transparent_hugepage () 1
include/linux/netfilter.h +1 -1
@@ -316,7 +316,7 @@ NF_HOOK_LIST(uint8_t pf, unsigned int hook, struct net *net, struct sock *sk,INIT_LIST_HEAD (&sublist);list_for_each_entry_safe (skb, next, head, list) { -list_del (&skb->list); +skb_list_del_init (skb);if (nf_hook (pf, hook, net, sk, skb, in, out, okfn) ==1 )list_add_tail (&skb->list, &sublist); }
include/scsi/libiscsi.h +3 -0
@@ -132,6 +132,9 @@ struct iscsi_task {void *dd_data;/* driver/transport data */ }; +/* invalid scsi_task pointer */ +#define INVALID_SCSI_TASK (struct iscsi_task *)-1l +static inline int iscsi_task_has_unsol_data (struct iscsi_task *task) {return task->unsol_r2t.data_length > task->unsol_r2t.sent;
include/trace/events/writeback.h +4 -4
@@ -192,7 +192,7 @@ TRACE_EVENT(inode_foreign_history, ),TP_fast_assign ( - strncpy(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32); + strscpy_pad(__entry->name, bdi_dev_name(inode_to_bdi(inode)), 32); __entry->ino = inode->i_ino; __entry->cgroup_ino =__trace_wbc_assign_cgroup (wbc); __entry->history = history;
@@ -221,7 +221,7 @@ TRACE_EVENT(inode_switch_wbs, ),TP_fast_assign ( - strncpy(__entry->name, bdi_dev_name(old_wb->bdi), 32); + strscpy_pad(__entry->name, bdi_dev_name(old_wb->bdi), 32); __entry->ino = inode->i_ino; __entry->old_cgroup_ino =__trace_wb_assign_cgroup (old_wb); __entry->new_cgroup_ino =__trace_wb_assign_cgroup (new_wb);
@@ -254,7 +254,7 @@ TRACE_EVENT(track_foreign_dirty,struct address_space *mapping =page_mapping (page);struct inode *inode = mapping ? mapping->host :NULL ; -strncpy (__entry->name,bdi_dev_name (wb->bdi),32 ); +strscpy_pad (__entry->name,bdi_dev_name (wb->bdi),32 ); __entry->bdi_id = wb->bdi->id; __entry->ino = inode ? inode->i_ino :0 ; __entry->memcg_id = wb->memcg_css->id;
@@ -287,7 +287,7 @@ TRACE_EVENT(flush_foreign, ),TP_fast_assign ( - strncpy(__entry->name, bdi_dev_name(wb->bdi), 32); + strscpy_pad(__entry->name, bdi_dev_name(wb->bdi), 32); __entry->cgroup_ino =__trace_wb_assign_cgroup (wb); __entry->frn_bdi_id = frn_bdi_id; __entry->frn_memcg_id = frn_memcg_id;
include/uapi/linux/wireless.h +5 -1
@@ -74,7 +74,11 @@#include <linux/socket.h> /* for "struct sockaddr" et al */ #include <linux/if.h> /* for IFNAMSIZ and co... */ -#include <stddef.h> /* for offsetof */ +#ifdef __KERNEL__ +# include <linux/stddef.h> /* for offsetof */ +#else +# include <stddef.h> /* for offsetof */ +#endif /***************************** VERSION *****************************/ /*
include/uapi/sound/skl-tplg-interface.h +2 -0
@@ -18,6 +18,8 @@*/ #define SKL_CONTROL_TYPE_BYTE_TLV 0x100#define SKL_CONTROL_TYPE_MIC_SELECT 0x102 +#define SKL_CONTROL_TYPE_MULTI_IO_SELECT 0x103 +#define SKL_CONTROL_TYPE_MULTI_IO_SELECT_DMIC 0x104#define HDA_SST_CFG_MAX 900/* size of copier cfg*/ #define MAX_IN_QUEUE 8
net/batman-adv/log.c +1 -0
@@ -180,6 +180,7 @@ static const struct file_operations batadv_log_fops = { .read = batadv_log_read, .poll = batadv_log_poll, .llseek = no_llseek, + .owner = THIS_MODULE, };/**
net/ipv4/fib_frontend.c +1 -1
@@ -706,7 +706,7 @@ int fib_gw_from_via(struct fib_config *cfg, struct nlattr *nla, cfg->fc_gw4 = *((__be32 *)via->rtvia_addr);break ;case AF_INET6 : -#ifdef CONFIG_IPV6 +#if IS_ENABLED (CONFIG_IPV6 )if (alen !=sizeof (struct in6_addr )) {NL_SET_ERR_MSG (extack,"Invalid IPv6 address in RTA_VIA" );return -EINVAL ;
sound/soc/intel/skylake/bxt-sst.c +0 -3
@@ -17,7 +17,6 @@#include "skl.h" #define BXT_BASEFW_TIMEOUT 3000 -#define BXT_INIT_TIMEOUT 300#define BXT_ROM_INIT_TIMEOUT 70#define BXT_IPC_PURGE_FW 0x01004000
@@ -38,8 +37,6 @@/* Delay before scheduling D0i3 entry */ #define BXT_D0I3_DELAY 5000 -#define BXT_FW_ROM_INIT_RETRY 3 -static unsigned int bxt_get_errorcode (struct sst_dsp *ctx) {return sst_dsp_shim_read (ctx,BXT_ADSP_ERROR_CODE );
sound/soc/intel/skylake/cnl-sst.c +28 -7
@@ -57,18 +57,34 @@ static int cnl_prepare_fw(struct sst_dsp *ctx, const void *fwdata, u32 fwsize) ctx->dsp_ops.stream_tag = stream_tag;memcpy (ctx->dmab.area, fwdata, fwsize); + ret =skl_dsp_core_power_up (ctx,SKL_DSP_CORE0_MASK ); +if (ret <0 ) { +dev_err (ctx->dev,"dsp core0 power up failed\n" ); + ret = -EIO ; + goto base_fw_load_failed; + } +/* purge FW request */ sst_dsp_shim_write (ctx,CNL_ADSP_REG_HIPCIDR ,CNL_ADSP_REG_HIPCIDR_BUSY | (CNL_IPC_PURGE | ((stream_tag -1 ) <<CNL_ROM_CTRL_DMA_ID ))); - ret =cnl_dsp_enable_core (ctx,SKL_DSP_CORE0_MASK ); + ret =skl_dsp_start_core (ctx,SKL_DSP_CORE0_MASK );if (ret <0 ) { -dev_err (ctx->dev,"dsp boot core failed ret: %d\n" , ret); +dev_err (ctx->dev,"Start dsp core failed ret: %d\n" , ret); ret = -EIO ; goto base_fw_load_failed; } + ret =sst_dsp_register_poll (ctx,CNL_ADSP_REG_HIPCIDA , +CNL_ADSP_REG_HIPCIDA_DONE , +CNL_ADSP_REG_HIPCIDA_DONE , +BXT_INIT_TIMEOUT ,"HIPCIDA Done" ); +if (ret <0 ) { +dev_err (ctx->dev,"timeout for purge request: %d\n" , ret); + goto base_fw_load_failed; + } +/* enable interrupt */ cnl_ipc_int_enable (ctx);cnl_ipc_op_int_enable (ctx);
@@ -109,7 +125,7 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx) {struct firmware stripped_fw;struct skl_dev *cnl = ctx->thread_context; -int ret; +int ret, i;if (!ctx->fw) { ret =request_firmware (&ctx->fw, ctx->fw_name, ctx->dev);
@@ -131,12 +147,16 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx) stripped_fw.size = ctx->fw->size;skl_dsp_strip_extended_manifest (&stripped_fw); - ret =cnl_prepare_fw (ctx, stripped_fw.data, stripped_fw.size); -if (ret <0 ) { -dev_err (ctx->dev,"prepare firmware failed: %d\n" , ret); - goto cnl_load_base_firmware_failed; +for (i =0 ; i <BXT_FW_ROM_INIT_RETRY ; i++) { + ret =cnl_prepare_fw (ctx, stripped_fw.data, stripped_fw.size); +if (!ret) +break ; +dev_dbg (ctx->dev,"prepare firmware failed: %d\n" , ret); } +if (ret <0 ) + goto cnl_load_base_firmware_failed; + ret =sst_transfer_fw_host_dma (ctx);if (ret <0 ) {dev_err (ctx->dev,"transfer firmware failed: %d\n" , ret);
@@ -158,6 +178,7 @@ static int cnl_load_base_firmware(struct sst_dsp *ctx)return 0 ; cnl_load_base_firmware_failed: +dev_err (ctx->dev,"firmware load failed: %d\n" , ret);release_firmware (ctx->fw); ctx->fw =NULL ;
sound/soc/intel/skylake/skl-nhlt.c +2 -1
@@ -182,7 +182,8 @@ void skl_nhlt_remove_sysfs(struct skl_dev *skl) {struct device *dev = &skl->pci->dev; -sysfs_remove_file (&dev->kobj, &dev_attr_platform_id.attr); +if (skl->nhlt) +sysfs_remove_file (&dev->kobj, &dev_attr_platform_id.attr); }/*
sound/soc/intel/skylake/skl-sst-dsp.h +2 -0
@@ -67,6 +67,8 @@ struct skl_dev;#define SKL_FW_INIT 0x1#define SKL_FW_RFW_START 0xf +#define BXT_FW_ROM_INIT_RETRY 3 +#define BXT_INIT_TIMEOUT 300#define SKL_ADSPIC_IPC 1#define SKL_ADSPIS_IPC 1
sound/soc/intel/skylake/skl-topology.c +156 -3
204 lines not on this page · raw message
sound/soc/intel/skylake/skl-topology.h +1 -0
@@ -306,6 +306,7 @@ struct skl_pipe {struct skl_path_config configs[SKL_MAX_PATH_CONFIGS ];struct list_head w_list;bool passthru; +u32 pipe_config_idx;
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.