Linux 5.19.10
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.19.10 kernel.
All users of the 5.19 kernel series must upgrade.
The updated 5.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.19.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/iio/gyroscope/bosch,bmg160.yaml | 2 Documentation/input/joydev/joystick.rst | 1 Makefile | 2 arch/loongarch/Kconfig | 1 arch/loongarch/include/asm/acpi.h | 2 arch/loongarch/kernel/acpi.c | 2 arch/loongarch/mm/init.c | 22 +- arch/x86/kvm/mmu/mmu.c | 45 ---- arch/x86/kvm/mmu/spte.h | 14 + arch/x86/kvm/x86.c | 44 ++++ drivers/acpi/resource.c | 10 + drivers/gpio/gpio-104-dio-48e.c | 10 - drivers/gpio/gpio-104-idio-16.c | 18 + drivers/gpio/gpio-mockup.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 35 ++- drivers/gpu/drm/msm/msm_rd.c | 3 drivers/hid/intel-ish-hid/ishtp-hid.h | 2 drivers/hid/intel-ish-hid/ishtp/client.c | 68 +++--- drivers/infiniband/hw/irdma/uk.c | 3 drivers/infiniband/hw/mlx5/cq.c | 4 drivers/infiniband/hw/mlx5/main.c | 2 drivers/infiniband/hw/mlx5/mlx5_ib.h | 13 + drivers/infiniband/hw/mlx5/umr.c | 81 +++++++- drivers/input/joystick/iforce/iforce-main.c | 1 drivers/input/touchscreen/goodix.c | 2 drivers/iommu/intel/iommu.c | 100 ++++------ drivers/net/ethernet/broadcom/tg3.c | 8 drivers/net/ethernet/mellanox/mlx5/core/fw.c | 4 drivers/net/ethernet/mellanox/mlx5/core/main.c | 72 +++++++ drivers/net/ethernet/mellanox/mlx5/core/vport.c | 14 + drivers/net/ieee802154/cc2520.c | 1 drivers/net/usb/cdc_ether.c | 7 drivers/net/usb/r8152.c | 3 drivers/nvme/host/pci.c | 2 drivers/nvme/target/tcp.c | 3 drivers/peci/cpu.c | 3 drivers/perf/arm_pmu_platform.c | 2 drivers/platform/surface/surface_aggregator_registry.c | 3 drivers/platform/x86/acer-wmi.c | 9 drivers/platform/x86/asus-wmi.c | 9 drivers/usb/storage/unusual_uas.h | 7 include/linux/intel-iommu.h | 9 include/linux/mlx5/driver.h | 20 +- include/linux/mlx5/mlx5_ifc.h | 25 ++ net/bluetooth/mgmt.c | 71 ++++--- net/dsa/tag_hellcreek.c | 2 48 files changed, 536 insertions(+), 245 deletions(-)
Aharon Landau (1):
RDMA/mlx5: Add a umr recovery flow
Chengming Gui (1):
drm/amd/amdgpu: skip ucode loading if ucode_size == 0
Chuanhong Guo (1):
ACPI: resource: skip IRQ override on AMD Zen platforms
Evan Quan (1):
drm/amd/pm: use vbios carried pptable for all SMU13.0.7 SKUs
Even Xu (1):
hid: intel-ish-hid: ishtp: Fix ishtp client sending disordered message
Greg Kroah-Hartman (1):
Linux 5.19.10
Greg Tulli (1):
Input: iforce - add support for Boeder Force Feedback Wheel
Guchun Chen (1):
drm/amdgpu: disable FRU access on special SIENNA CICHLID card
Hans de Goede (1):
platform/x86: acer-wmi: Acer Aspire One AOD270/Packard Bell Dot keymap fixes
Hu Xiaoying (1):
usb: storage: Add ASUS <0x0b05:0x1932> to IGNORE_UAS
Huacai Chen (1):
LoongArch: Fix section mismatch due to acpi_os_ioremap()
Iwona Winiarska (1):
peci: cpu: Fix use-after-free in adev_release()
Jarrah Gosbell (1):
Input: goodix - add compatible string for GT1158
Jason Wang (1):
HID: ishtp-hid-clientHID: ishtp-hid-client: Fix comment typo
Jean-Francois Le Fillatre (1):
r8152: add PID for the Lenovo OneLink+ Dock
Junaid Shahid (1):
kvm: x86: mmu: Always flush TLBs when enabling dirty logging
Kai-Heng Feng (1):
tg3: Disable tg3 device on system reboot to avoid triggering AER
Krzysztof Kozlowski (1):
dt-bindings: iio: gyroscope: bosch,bmg160: correct number of pins
Kurt Kanzenbach (1):
net: dsa: hellcreek: Print warning only once
Li Qiong (1):
ieee802154: cc2520: add rc code in cc2520_tx()
Lu Baolu (1):
iommu/vt-d: Fix kdump kernels boot failure with scalable mode
Luiz Augusto von Dentz (1):
Bluetooth: MGMT: Fix Get Device Flags
Luke D. Jones (1):
platform/x86: asus-wmi: Increase FAN_CURVE_BUF_LEN to 32
Maher Sanalla (1):
RDMA/mlx5: Rely on RoCE fw cap instead of devlink when setting profile
Maor Gottlieb (1):
RDMA/mlx5: Fix UMR cleanup on error flow of driver init
Maurizio Lombardi (1):
nvmet-tcp: fix unhandled tcp states in nvmet_tcp_state_change()
Maximilian Luz (1):
platform/surface: aggregator_registry: Add support for Surface Laptop Go 2
Ondrej Jirman (1):
Input: goodix - add support for GT1158
Rob Clark (1):
drm/msm/rd: Fix FIFO-full deadlock
Shyamin Ayesh (1):
nvme-pci: add NVME_QUIRK_BOGUS_NID for Lexar NM610
Sindhu-Devale (1):
RDMA/irdma: Use s/g array in post send only when its valid
Wei Yongjun (1):
gpio: mockup: remove gpio debugfs when remove device
William Breathitt Gray (2):
gpio: 104-dio-48e: Make irq_chip immutable
gpio: 104-idio-16: Make irq_chip immutable
Yishai Hadas (2):
net/mlx5: Introduce ifc bits for using software vhca id net/mlx5: Use software VHCA id when it's supported
Yu Zhe (1):
perf/arm_pmu_platform: fix tests for platform_get_irq() failure
Yupeng Li (1):
LoongArch: Fix arch_remove_memory() undefined build error
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/iio/gyroscope/bosch,bmg160.yaml +2 -0
@@ -24,8 +24,10 @@ properties: interrupts: minItems: 1 + maxItems: 2 description: Should be configured with type IRQ_TYPE_EDGE_RISING. + If two interrupts are provided, expected order is INT1 and INT2. required: - compatible
Documentation/input/joydev/joystick.rst +1 -0
@@ -517,6 +517,7 @@ All I-Force devices are supported by the iforce module. This includes: * AVB Mag Turbo Force * AVB Top Shot Pegasus * AVB Top Shot Force Feedback Racing Wheel +* Boeder Force Feedback Wheel * Logitech WingMan Force * Logitech WingMan Force Wheel * Guillemot Race Leader Force Feedback
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 19 -SUBLEVEL = 9 +SUBLEVEL = 10 EXTRAVERSION = NAME = Superb Owl
arch/loongarch/Kconfig +1 -0
@@ -36,6 +36,7 @@ config LOONGARCH select ARCH_INLINE_SPIN_UNLOCK_BH if !PREEMPTION select ARCH_INLINE_SPIN_UNLOCK_IRQ if !PREEMPTION select ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE if !PREEMPTION + select ARCH_KEEP_MEMBLOCK select ARCH_MIGHT_HAVE_PC_PARPORT select ARCH_MIGHT_HAVE_PC_SERIO select ARCH_SPARSEMEM_ENABLE
arch/loongarch/include/asm/acpi.h +1 -1
@@ -15,7 +15,7 @@ extern int acpi_pci_disabled;extern int acpi_noirq;#define acpi_os_ioremap acpi_os_ioremap -void __init __iomem *acpi_os_ioremap (acpi_physical_address phys,acpi_size size); +void __iomem *acpi_os_ioremap (acpi_physical_address phys,acpi_size size);static inline void disable_acpi (void ) {
arch/loongarch/kernel/acpi.c +1 -1
@@ -113,7 +113,7 @@ void __init __acpi_unmap_table(void __iomem *map, unsigned long size)early_memunmap (map, size); } -void __init __iomem *acpi_os_ioremap (acpi_physical_address phys,acpi_size size) +void __iomem *acpi_os_ioremap (acpi_physical_address phys,acpi_size size) {if (!memblock_is_memory (phys))return ioremap (phys, size);
arch/loongarch/mm/init.c +10 -12
@@ -131,18 +131,6 @@ int arch_add_memory(int nid, u64 start, u64 size, struct mhp_params *params)return ret; } -#ifdef CONFIG_NUMA -int memory_add_physaddr_to_nid (u64 start) -{ -int nid; - - nid =pa_to_nid (start); -return nid; -} -EXPORT_SYMBOL_GPL (memory_add_physaddr_to_nid); -#endif - -#ifdef CONFIG_MEMORY_HOTREMOVE void arch_remove_memory (u64 start,u64 size,struct vmem_altmap *altmap) {unsigned long start_pfn = start >>PAGE_SHIFT ;
@@ -154,6 +142,16 @@ void arch_remove_memory(u64 start, u64 size, struct vmem_altmap *altmap) page +=vmem_altmap_offset (altmap); __remove_pages(start_pfn, nr_pages, altmap); } + +#ifdef CONFIG_NUMA +int memory_add_physaddr_to_nid (u64 start) +{ +int nid; + + nid =pa_to_nid (start); +return nid; +} +EXPORT_SYMBOL_GPL (memory_add_physaddr_to_nid);#endif #endif
arch/x86/kvm/mmu/mmu.c +7 -38
86 lines not on this page · raw message
arch/x86/kvm/mmu/spte.h +10 -4
@@ -326,7 +326,7 @@ static __always_inline bool is_rsvd_spte(struct rsvd_bits_validate *rsvd_check, }/* -* An shadow-present leaf SPTE may be non-writable for 3 possible reasons: +* A shadow-present leaf SPTE may be non-writable for 4 possible reasons: * * 1. To intercept writes for dirty logging. KVM write-protects huge pages * so that they can be split be split down into the dirty logging
@@ -344,8 +344,13 @@ static __always_inline bool is_rsvd_spte(struct rsvd_bits_validate *rsvd_check,* read-only memslot or guest memory backed by a read-only VMA. Writes to * such pages are disallowed entirely. * -* To keep track of why a given SPTE is write-protected, KVM uses 2 -* software-only bits in the SPTE: +* 4. To emulate the Accessed bit for SPTEs without A/D bits. Note, in this +* case, the SPTE is access-protected, not just write-protected! +* +* For cases #1 and #4, KVM can safely make such SPTEs writable without taking +* mmu_lock as capturing the Accessed/Dirty state doesn't require taking it. +* To differentiate #1 and #4 from #2 and #3, KVM uses two software-only bits +* in the SPTE: * * shadow_mmu_writable_mask, aka MMU-writable - * Cleared on SPTEs that KVM is currently write-protecting for shadow paging
@@ -374,7 +379,8 @@ static __always_inline bool is_rsvd_spte(struct rsvd_bits_validate *rsvd_check,* shadow page tables between vCPUs. Write-protecting an SPTE for dirty logging * (which does not clear the MMU-writable bit), does not flush TLBs before * dropping the lock, as it only needs to synchronize guest writes with the -* dirty bitmap. +* dirty bitmap. Similarly, making the SPTE inaccessible (and non-writable) for +* access-tracking via the clear_young() MMU notifier also does not flush TLBs. * * So, there is the problem: clearing the MMU-writable bit can encounter a * write-protected SPTE while CPUs still have writable mappings for that SPTE
arch/x86/kvm/x86.c +44 -0
50 lines not on this page · raw message
drivers/acpi/resource.c +10 -0
@@ -416,6 +416,16 @@ static bool acpi_dev_irq_override(u32 gsi, u8 triggering, u8 polarity, {int i; +#ifdef CONFIG_X86 +/* +* IRQ override isn't needed on modern AMD Zen systems and +* this override breaks active low IRQs on AMD Ryzen 6000 and +* newer systems. Skip it. +*/ +if (boot_cpu_has (X86_FEATURE_ZEN )) +return false; +#endif +for (i =0 ; i <ARRAY_SIZE (skip_override_table); i++) {const struct irq_override_cmp *entry = &skip_override_table[i];
drivers/gpio/gpio-104-dio-48e.c +7 -3
@@ -271,6 +271,7 @@ static void dio48e_irq_mask(struct irq_data *data) dio48egpio->irq_mask &= ~BIT (0 ); else dio48egpio->irq_mask &= ~BIT(1); +gpiochip_disable_irq (chip, offset);if (!dio48egpio->irq_mask)/* disable interrupts */
@@ -298,6 +299,7 @@ static void dio48e_irq_unmask(struct irq_data *data)iowrite8 (0x00 , dio48egpio->base +0xB ); } +gpiochip_enable_irq (chip, offset);if (offset ==19 ) dio48egpio->irq_mask |=BIT (0 );else
@@ -320,12 +322,14 @@ static int dio48e_irq_set_type(struct irq_data *data, unsigned int flow_type)return 0 ; } -static struct irq_chip dio48e_irqchip = { +static const struct irq_chip dio48e_irqchip = { .name ="104-dio-48e" , .irq_ack = dio48e_irq_ack, .irq_mask = dio48e_irq_mask, .irq_unmask = dio48e_irq_unmask, - .irq_set_type = dio48e_irq_set_type + .irq_set_type = dio48e_irq_set_type, + .flags =IRQCHIP_IMMUTABLE , +GPIOCHIP_IRQ_RESOURCE_HELPERS , };static irqreturn_t dio48e_irq_handler (int irq,void *dev_id)
@@ -414,7 +418,7 @@ static int dio48e_probe(struct device *dev, unsigned int id) dio48egpio->chip.set_multiple = dio48e_gpio_set_multiple; girq = &dio48egpio->chip.irq; - girq->chip = &dio48e_irqchip; +gpio_irq_chip_set_chip (girq, &dio48e_irqchip);/* This will let us handle the parent IRQ in the driver */ girq->parent_handler =NULL ; girq->num_parents =0 ;
drivers/gpio/gpio-104-idio-16.c +11 -7
@@ -150,10 +150,11 @@ static void idio_16_irq_mask(struct irq_data *data) {struct gpio_chip *chip =irq_data_get_irq_chip_data (data);struct idio_16_gpio *const idio16gpio =gpiochip_get_data (chip); -const unsigned long mask =BIT (irqd_to_hwirq (data)); +const unsigned long offset =irqd_to_hwirq (data);unsigned long flags; - idio16gpio->irq_mask &= ~mask; + idio16gpio->irq_mask &= ~BIT (offset); +gpiochip_disable_irq (chip, offset);if (!idio16gpio->irq_mask) {raw_spin_lock_irqsave (&idio16gpio->lock, flags);
@@ -168,11 +169,12 @@ static void idio_16_irq_unmask(struct irq_data *data) {struct gpio_chip *chip =irq_data_get_irq_chip_data (data);struct idio_16_gpio *const idio16gpio =gpiochip_get_data (chip); -const unsigned long mask =BIT (irqd_to_hwirq (data)); +const unsigned long offset =irqd_to_hwirq (data);const unsigned long prev_irq_mask = idio16gpio->irq_mask;unsigned long flags; - idio16gpio->irq_mask |= mask; +gpiochip_enable_irq (chip, offset); + idio16gpio->irq_mask |=BIT (offset);if (!prev_irq_mask) {raw_spin_lock_irqsave (&idio16gpio->lock, flags);
@@ -193,12 +195,14 @@ static int idio_16_irq_set_type(struct irq_data *data, unsigned int flow_type)return 0 ; } -static struct irq_chip idio_16_irqchip = { +static const struct irq_chip idio_16_irqchip = { .name ="104-idio-16" , .irq_ack = idio_16_irq_ack, .irq_mask = idio_16_irq_mask, .irq_unmask = idio_16_irq_unmask, - .irq_set_type = idio_16_irq_set_type + .irq_set_type = idio_16_irq_set_type, + .flags =IRQCHIP_IMMUTABLE , +GPIOCHIP_IRQ_RESOURCE_HELPERS , };static irqreturn_t idio_16_irq_handler (int irq,void *dev_id)
@@ -275,7 +279,7 @@ static int idio_16_probe(struct device *dev, unsigned int id) idio16gpio->out_state =0xFFFF ; girq = &idio16gpio->chip.irq; - girq->chip = &idio_16_irqchip; +gpio_irq_chip_set_chip (girq, &idio_16_irqchip);/* This will let us handle the parent IRQ in the driver */ girq->parent_handler =NULL ; girq->num_parents =0 ;
drivers/gpio/gpio-mockup.c +8 -1
@@ -373,6 +373,13 @@ static void gpio_mockup_debugfs_setup(struct device *dev, } } +static void gpio_mockup_debugfs_cleanup (void *data) +{ +struct gpio_mockup_chip *chip = data; + +debugfs_remove_recursive (chip->dbg_dir); +} +static void gpio_mockup_dispose_mappings (void *data) {struct gpio_mockup_chip *chip = data;
@@ -455,7 +462,7 @@ static int gpio_mockup_probe(struct platform_device *pdev)gpio_mockup_debugfs_setup (dev, chip); -return 0 ; +return devm_add_action_or_reset (dev, gpio_mockup_debugfs_cleanup, chip); }static const struct of_device_id gpio_mockup_of_match[] = {
drivers/gpu/drm/amd/amdgpu/amdgpu_fru_eeprom.c +7 -2
@@ -66,10 +66,15 @@ static bool is_fru_eeprom_supported(struct amdgpu_device *adev)return true;case CHIP_SIENNA_CICHLID :if (strnstr (atom_ctx->vbios_version,"D603" , +sizeof (atom_ctx->vbios_version))) { +if (strnstr (atom_ctx->vbios_version,"D603GLXE" ,sizeof (atom_ctx->vbios_version))) -return true; -else +return false; +else +return true; + }else {return false; + }default :return false; }
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +1 -1
@@ -2372,7 +2372,7 @@ static int psp_load_smu_fw(struct psp_context *psp)static bool fw_load_skip_check (struct psp_context *psp,struct amdgpu_firmware_info *ucode) { -if (!ucode->fw) +if (!ucode->fw || !ucode->ucode_size)return true; if (ucode->ucode_id == AMDGPU_UCODE_ID_SMC &&
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +22 -13
@@ -382,11 +382,27 @@ static int smu_v13_0_7_append_powerplay_table(struct smu_context *smu)return 0 ; } +static int smu_v13_0_7_get_pptable_from_pmfw (struct smu_context *smu, +void **table, +uint32_t *size) +{ +struct smu_table_context *smu_table = &smu->smu_table; +void *combo_pptable = smu_table->combo_pptable; +int ret =0 ; + + ret =smu_cmn_get_combo_pptable (smu); +if (ret) +return ret; + + *table = combo_pptable; + *size =sizeof (struct smu_13_0_7_powerplay_table ); + +return 0 ; +}static int smu_v13_0_7_setup_pptable (struct smu_context *smu) {struct smu_table_context *smu_table = &smu->smu_table; -void *combo_pptable = smu_table->combo_pptable;struct amdgpu_device *adev = smu->adev;int ret =0 ;
@@ -395,18 +411,11 @@ static int smu_v13_0_7_setup_pptable(struct smu_context *smu)* be used directly by driver. To get the raw pptable, we need to * rely on the combo pptable(and its revelant SMU message). */ -if (adev->scpm_enabled) { - ret =smu_cmn_get_combo_pptable (smu); -if (ret) -return ret; - - smu->smu_table.power_play_table = combo_pptable; - smu->smu_table.power_play_table_size =sizeof (struct smu_13_0_7_powerplay_table ); - }else { - ret =smu_v13_0_setup_pptable (smu); -if (ret) -return ret; - } + ret =smu_v13_0_7_get_pptable_from_pmfw (smu, + &smu_table->power_play_table, + &smu_table->power_play_table_size); +if (ret) +return ret; ret =smu_v13_0_7_store_powerplay_table (smu);if (ret)
drivers/gpu/drm/msm/msm_rd.c +3 -0
@@ -196,6 +196,9 @@ static int rd_open(struct inode *inode, struct file *file) file->private_data = rd; rd->open = true; +/* Reset fifo to clear any previously unread data: */ + rd->fifo.head = rd->fifo.tail =0 ; +/* the parsing tools need to know gpu-id to know which * register database to load. *
drivers/hid/intel-ish-hid/ishtp-hid.h +1 -1
@@ -105,7 +105,7 @@ struct report_list {* @multi_packet_cnt: Count of fragmented packet count * * This structure is used to store completion flags and per client data like -* like report description, number of HID devices etc. +* report description, number of HID devices etc. */ struct ishtp_cl_data {/* completion flags */
drivers/hid/intel-ish-hid/ishtp/client.c +39 -29
91 lines not on this page · raw message
drivers/infiniband/hw/irdma/uk.c +2 -1
@@ -497,7 +497,8 @@ int irdma_uk_send(struct irdma_qp_uk *qp, struct irdma_post_sq_info *info, FIELD_PREP(IRDMAQPSQ_IMMDATA, info->imm_data)); i =0 ; }else { - qp->wqe_ops.iw_set_fragment (wqe,0 , op_info->sg_list, + qp->wqe_ops.iw_set_fragment (wqe,0 , + frag_cnt ? op_info->sg_list :NULL , qp->swqe_polarity); i =1 ; }
drivers/infiniband/hw/mlx5/cq.c +4 -0
@@ -523,6 +523,10 @@ static int mlx5_poll_one(struct mlx5_ib_cq *cq, "Requestor" : "Responder", cq->mcq.cqn);mlx5_ib_dbg (dev,"syndrome 0x%x, vendor syndrome 0x%x\n" , err_cqe->syndrome, err_cqe->vendor_err_synd); +if (wc->status !=IB_WC_WR_FLUSH_ERR && + (*cur_qp)->type ==MLX5_IB_QPT_REG_UMR ) + dev->umrc.state =MLX5_UMR_STATE_RECOVER ; +if (opcode ==MLX5_CQE_REQ_ERR ) { wq = &(*cur_qp)->sq; wqe_ctr =be16_to_cpu (cqe64->wqe_counter);
drivers/infiniband/hw/mlx5/main.c +1 -1
@@ -4336,7 +4336,7 @@ static int mlx5r_probe(struct auxiliary_device *adev, dev->mdev = mdev; dev->num_ports = num_ports; -if (ll ==IB_LINK_LAYER_ETHERNET && !mlx5_is_roce_init_enabled (mdev)) +if (ll ==IB_LINK_LAYER_ETHERNET && !mlx5_get_roce_state (mdev)) profile = &raw_eth_profile;else profile = &pf_profile;
drivers/infiniband/hw/mlx5/mlx5_ib.h +12 -1
@@ -717,13 +717,24 @@ struct mlx5_ib_umr_context {struct completion done; }; +enum { +MLX5_UMR_STATE_UNINIT , +MLX5_UMR_STATE_ACTIVE , +MLX5_UMR_STATE_RECOVER , +MLX5_UMR_STATE_ERR , +}; +struct umr_common {struct ib_pd *pd;struct ib_cq *cq;struct ib_qp *qp; -/* control access to UMR QP +/* Protects from UMR QP overflow */ struct semaphore sem; +/* Protects from using UMR while the UMR is not active +*/ +struct mutex lock; +unsigned int state; };struct mlx5_cache_ent {
drivers/infiniband/hw/mlx5/umr.c +71 -10
112 lines not on this page · raw message
drivers/input/joystick/iforce/iforce-main.c +1 -0
@@ -50,6 +50,7 @@ static struct iforce_device iforce_device[] = { { 0x046d, 0xc291, "Logitech WingMan Formula Force", btn_wheel, abs_wheel, ff_iforce }, { 0x05ef, 0x020a, "AVB Top Shot Pegasus", btn_joystick_avb, abs_avb_pegasus, ff_iforce }, { 0x05ef, 0x8884, "AVB Mag Turbo Force", btn_wheel, abs_wheel, ff_iforce }, + { 0x05ef, 0x8886, "Boeder Force Feedback Wheel", btn_wheel, abs_wheel, ff_iforce }, { 0x05ef, 0x8888, "AVB Top Shot Force Feedback Racing Wheel", btn_wheel, abs_wheel, ff_iforce }, //? { 0x061c, 0xc0a4, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce }, //? { 0x061c, 0xc084, "ACT LABS Force RS", btn_wheel, abs_wheel, ff_iforce },
drivers/input/touchscreen/goodix.c +2 -0
@@ -95,6 +95,7 @@ static const struct goodix_chip_data gt9x_chip_data = {static const struct goodix_chip_id goodix_chip_ids[] = { { .id ="1151" , .data = >1x_chip_data }, + { .id ="1158" , .data = >1x_chip_data }, { .id ="5663" , .data = >1x_chip_data }, { .id ="5688" , .data = >1x_chip_data }, { .id ="917S" , .data = >1x_chip_data },
@@ -1514,6 +1515,7 @@ MODULE_DEVICE_TABLE(acpi, goodix_acpi_match);#ifdef CONFIG_OF static const struct of_device_id goodix_of_match[] = { { .compatible ="goodix,gt1151" }, + { .compatible ="goodix,gt1158" }, { .compatible ="goodix,gt5663" }, { .compatible ="goodix,gt5688" }, { .compatible = "goodix,gt911" },
drivers/iommu/intel/iommu.c +44 -56
166 lines not on this page · raw message
drivers/net/ethernet/broadcom/tg3.c +6 -2
@@ -18076,16 +18076,20 @@ static void tg3_shutdown(struct pci_dev *pdev)struct net_device *dev =pci_get_drvdata (pdev);struct tg3 *tp =netdev_priv (dev); +tg3_reset_task_cancel (tp); +rtnl_lock (); +netif_device_detach (dev);if (netif_running (dev))dev_close (dev); -if (system_state ==SYSTEM_POWER_OFF ) -tg3_power_down (tp); +tg3_power_down (tp);rtnl_unlock (); + +pci_disable_device (pdev); }/**
drivers/net/ethernet/mellanox/mlx5/core/fw.c +4 -0
@@ -289,6 +289,10 @@ int mlx5_cmd_init_hca(struct mlx5_core_dev *dev, uint32_t *sw_owner_id) sw_owner_id[i]); } +if (MLX5_CAP_GEN_2_MAX (dev, sw_vhca_id_valid) && + dev->priv.sw_vhca_id >0 ) +MLX5_SET (init_hca_in, in, sw_vhca_id, dev->priv.sw_vhca_id); +return mlx5_cmd_exec_in (dev, init_hca, in); }
drivers/net/ethernet/mellanox/mlx5/core/main.c +70 -2
114 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/vport.c +11 -3
@@ -1086,9 +1086,17 @@ int mlx5_nic_vport_affiliate_multiport(struct mlx5_core_dev *master_mdev, goto free;MLX5_SET (modify_nic_vport_context_in, in, field_select.affiliation,1 ); -MLX5_SET (modify_nic_vport_context_in, in, - nic_vport_context.affiliated_vhca_id, -MLX5_CAP_GEN (master_mdev, vhca_id)); +if (MLX5_CAP_GEN_2 (master_mdev, sw_vhca_id_valid)) { +MLX5_SET (modify_nic_vport_context_in, in, + nic_vport_context.vhca_id_type,VHCA_ID_TYPE_SW ); +MLX5_SET (modify_nic_vport_context_in, in, + nic_vport_context.affiliated_vhca_id, +MLX5_CAP_GEN_2 (master_mdev, sw_vhca_id)); + }else { +MLX5_SET (modify_nic_vport_context_in, in, + nic_vport_context.affiliated_vhca_id, +MLX5_CAP_GEN (master_mdev, vhca_id)); + }MLX5_SET (modify_nic_vport_context_in, in, nic_vport_context.affiliation_criteria,MLX5_CAP_GEN (port_mdev, affiliate_nic_vport_criteria));
drivers/net/ieee802154/cc2520.c +1 -0
@@ -504,6 +504,7 @@ cc2520_tx(struct ieee802154_hw *hw, struct sk_buff *skb) goto err_tx;if (status &CC2520_STATUS_TX_UNDERFLOW ) { + rc = -EINVAL ;dev_err (&priv->spi->dev,"cc2520 tx underflow exception\n" ); goto err_tx; }
drivers/net/usb/cdc_ether.c +7 -0
@@ -777,6 +777,13 @@ static const struct usb_device_id products[] = { },#endif +/* Lenovo ThinkPad OneLink+ Dock (based on Realtek RTL8153) */ +{ +USB_DEVICE_AND_INTERFACE_INFO (LENOVO_VENDOR_ID ,0x3054 ,USB_CLASS_COMM , + USB_CDC_SUBCLASS_ETHERNET, USB_CDC_PROTO_NONE), + .driver_info =0 , +}, + /* ThinkPad USB-C Dock (based on Realtek RTL8153) */ { USB_DEVICE_AND_INTERFACE_INFO(LENOVO_VENDOR_ID, 0x3062, USB_CLASS_COMM,
drivers/net/usb/r8152.c +3 -0
@@ -770,6 +770,7 @@ enum rtl8152_flags { RX_EPROTO, }; +#define DEVICE_ID_THINKPAD_ONELINK_PLUS_DOCK 0x3054#define DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2 0x3082#define DEVICE_ID_THINKPAD_USB_C_DONGLE 0x720c#define DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2 0xa387
@@ -9581,6 +9582,7 @@ static bool rtl8152_supports_lenovo_macpassthru(struct usb_device *udev)if (vendor_id ==VENDOR_ID_LENOVO ) {switch (product_id) { +case DEVICE_ID_THINKPAD_ONELINK_PLUS_DOCK :case DEVICE_ID_THINKPAD_THUNDERBOLT3_DOCK_GEN2 :case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN2 :case DEVICE_ID_THINKPAD_USB_C_DOCK_GEN3 :
@@ -9828,6 +9830,7 @@ static const struct usb_device_id rtl8152_table[] = {REALTEK_USB_DEVICE (VENDOR_ID_MICROSOFT ,0x0927 ),REALTEK_USB_DEVICE (VENDOR_ID_SAMSUNG ,0xa101 ),REALTEK_USB_DEVICE (VENDOR_ID_LENOVO ,0x304f ), +REALTEK_USB_DEVICE (VENDOR_ID_LENOVO ,0x3054 ),REALTEK_USB_DEVICE (VENDOR_ID_LENOVO ,0x3062 ),REALTEK_USB_DEVICE (VENDOR_ID_LENOVO ,0x3069 ), REALTEK_USB_DEVICE(VENDOR_ID_LENOVO, 0x3082),
drivers/nvme/host/pci.c +2 -0
@@ -3517,6 +3517,8 @@ static const struct pci_device_id nvme_id_table[] = { .driver_data = NVME_QUIRK_NO_DEEPEST_PS, }, { PCI_DEVICE(0xc0a9, 0x540a), /* Crucial P2 */ .driver_data = NVME_QUIRK_BOGUS_NID, }, + { PCI_DEVICE(0x1d97, 0x2263), /* Lexar NM610 */ + .driver_data = NVME_QUIRK_BOGUS_NID, }, { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0061), .driver_data = NVME_QUIRK_DMA_ADDRESS_BITS_48, }, { PCI_DEVICE(PCI_VENDOR_ID_AMAZON, 0x0065),
drivers/nvme/target/tcp.c +3 -0
@@ -1506,6 +1506,9 @@ static void nvmet_tcp_state_change(struct sock *sk) goto done;switch (sk->sk_state) { +case TCP_FIN_WAIT2 : +case TCP_LAST_ACK : +break ;case TCP_FIN_WAIT1 :case TCP_CLOSE_WAIT :case TCP_CLOSE :
drivers/peci/cpu.c +1 -2
@@ -188,8 +188,6 @@ static void adev_release(struct device *dev) {struct auxiliary_device *adev =to_auxiliary_dev (dev); -auxiliary_device_uninit (adev); -kfree (adev->name);kfree (adev); }
@@ -234,6 +232,7 @@ static void unregister_adev(void *_adev)struct auxiliary_device *adev = _adev;auxiliary_device_delete (adev); +auxiliary_device_uninit (adev); }static int devm_adev_add (struct device *dev,int idx)
drivers/perf/arm_pmu_platform.c +1 -1
@@ -117,7 +117,7 @@ static int pmu_parse_irqs(struct arm_pmu *pmu)if (num_irqs ==1 ) {int irq =platform_get_irq (pdev,0 ); -if (irq &&irq_is_percpu_devid (irq)) +if ((irq >0 ) &&irq_is_percpu_devid (irq))return pmu_parse_percpu_irq (pmu, irq); }
drivers/platform/surface/surface_aggregator_registry.c +3 -0
@@ -556,6 +556,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {/* Surface Laptop Go 1 */ { "MSHW0118", (unsigned long)ssam_node_group_slg1 }, +/* Surface Laptop Go 2 */ + { "MSHW0290", (unsigned long)ssam_node_group_slg1 }, +/* Surface Laptop Studio */ { "MSHW0123", (unsigned long)ssam_node_group_sls },
drivers/platform/x86/acer-wmi.c +8 -1
@@ -99,6 +99,7 @@ static const struct key_entry acer_wmi_keymap[] __initconst = { {KE_KEY, 0x22, {KEY_PROG2} }, /* Arcade */ {KE_KEY, 0x23, {KEY_PROG3} }, /* P_Key */ {KE_KEY, 0x24, {KEY_PROG4} }, /* Social networking_Key */ + {KE_KEY, 0x27, {KEY_HELP} }, {KE_KEY, 0x29, {KEY_PROG3} }, /* P_Key for TM8372 */ {KE_IGNORE, 0x41, {KEY_MUTE} }, {KE_IGNORE, 0x42, {KEY_PREVIOUSSONG} },
@@ -112,7 +113,13 @@ static const struct key_entry acer_wmi_keymap[] __initconst = { {KE_IGNORE, 0x48, {KEY_VOLUMEUP} }, {KE_IGNORE, 0x49, {KEY_VOLUMEDOWN} }, {KE_IGNORE, 0x4a, {KEY_VOLUMEDOWN} }, - {KE_IGNORE, 0x61, {KEY_SWITCHVIDEOMODE} }, +/* +* 0x61 is KEY_SWITCHVIDEOMODE. Usually this is a duplicate input event +* with the "Video Bus" input device events. But sometimes it is not +* a dup. Map it to KEY_UNKNOWN instead of using KE_IGNORE so that +* udev/hwdb can override it on systems where it is not a dup. +*/ + {KE_KEY, 0x61, {KEY_UNKNOWN} }, {KE_IGNORE, 0x62, {KEY_BRIGHTNESSUP} }, {KE_IGNORE, 0x63, {KEY_BRIGHTNESSDOWN} }, {KE_KEY, 0x64, {KEY_SWITCHVIDEOMODE} }, /* Display Switch */
drivers/platform/x86/asus-wmi.c +4 -5
@@ -107,7 +107,7 @@ module_param(fnlock_default, bool, 0444);#define WMI_EVENT_MASK 0xFFFF#define FAN_CURVE_POINTS 8 -#define FAN_CURVE_BUF_LEN (FAN_CURVE_POINTS * 2) +#define FAN_CURVE_BUF_LEN 32#define FAN_CURVE_DEV_CPU 0x00#define FAN_CURVE_DEV_GPU 0x01/* Mask to determine if setting temperature or percentage */
@@ -2208,8 +2208,10 @@ static int fan_curve_get_factory_default(struct asus_wmi *asus, u32 fan_dev) curves = &asus->custom_fan_curves[fan_idx]; err =asus_wmi_evaluate_method_buf (asus->dsts_id, fan_dev, mode, buf,FAN_CURVE_BUF_LEN ); -if (err) +if (err) { +pr_warn ("%s (0x%08x) failed: %d\n" , __func__, fan_dev, err);return err; + }fan_curve_copy_from_buf (curves, buf); curves->device_id = fan_dev;
@@ -2227,9 +2229,6 @@ static int fan_curve_check_present(struct asus_wmi *asus, bool *available, err =fan_curve_get_factory_default (asus, fan_dev);if (err) { -pr_debug ("fan_curve_get_factory_default(0x%08x) failed: %d\n" , - fan_dev, err); -/* Don't cause probe to fail on devices without fan-curves */ return 0 ; }
drivers/usb/storage/unusual_uas.h +7 -0
@@ -62,6 +62,13 @@ UNUSUAL_DEV(0x0984, 0x0301, 0x0128, 0x0128, USB_SC_DEVICE, USB_PR_DEVICE, NULL, US_FL_IGNORE_UAS), +/* Reported-by: Tom Hu <[email protected]> */ +UNUSUAL_DEV (0x0b05 ,0x1932 ,0x0000 ,0x9999 , +"ASUS" , +"External HDD" , +USB_SC_DEVICE ,USB_PR_DEVICE ,NULL , +US_FL_IGNORE_UAS ), +/* Reported-by: David Webb <[email protected]> */ UNUSUAL_DEV(0x0bc2, 0x331a, 0x0000, 0x9999, "Seagate",
include/linux/intel-iommu.h +6 -3
@@ -196,7 +196,6 @@#define ecap_dis (e) (((e) >> 27) & 0x1)#define ecap_nest (e) (((e) >> 26) & 0x1)#define ecap_mts (e) (((e) >> 25) & 0x1) -#define ecap_ecs (e) (((e) >> 24) & 0x1)#define ecap_iotlb_offset (e) ((((e) >> 8) & 0x3ff) * 16)#define ecap_max_iotlb_offset (e) (ecap_iotlb_offset(e) + 16)#define ecap_coherent (e) ((e) & 0x1)
@@ -264,7 +263,6 @@#define DMA_GSTS_CFIS (((u32)1) << 23)/* DMA_RTADDR_REG */ -#define DMA_RTADDR_RTT (((u64)1) << 11)#define DMA_RTADDR_SMT (((u64)1) << 10)/* CCMD_REG */
@@ -579,6 +577,7 @@ struct intel_iommu {#ifdef CONFIG_INTEL_IOMMU unsigned long *domain_ids;/* bitmap of domains */ +unsigned long *copied_tables;/* bitmap of copied tables */ spinlock_t lock;/* protect context, domain ids */ struct root_entry *root_entry;/* virtual address */
@@ -692,6 +691,11 @@ static inline int nr_pte_to_next_page(struct dma_pte *pte) (struct dma_pte *)ALIGN ((unsigned long )pte,VTD_PAGE_SIZE ) - pte; } +static inline bool context_present (struct context_entry *context) +{ +return (context->lo &1 ); +} +extern struct dmar_drhd_unit *dmar_find_matched_drhd_unit (struct pci_dev *dev);extern int dmar_enable_qi (struct intel_iommu *iommu);
@@ -776,7 +780,6 @@ static inline void intel_iommu_debugfs_init(void) {}#endif /* CONFIG_INTEL_IOMMU_DEBUGFS */ extern const struct attribute_group *intel_iommu_groups[]; -bool context_present (struct context_entry *context);struct context_entry *iommu_context_addr (struct intel_iommu *iommu,u8 bus,u8 devfn,int alloc);
include/linux/mlx5/driver.h +11 -9
@@ -606,6 +606,7 @@ struct mlx5_priv {spinlock_t ctx_lock;struct mlx5_adev **adev;int adev_idx; +int sw_vhca_id;struct mlx5_events *events;struct mlx5_flow_steering *steering;
@@ -1274,16 +1275,17 @@ enum { MLX5_TRIGGERED_CMD_COMP = (u64)1 << 32, }; -static inline bool mlx5_is_roce_init_enabled (struct mlx5_core_dev *dev) +bool mlx5_is_roce_on (struct mlx5_core_dev *dev); + +static inline bool mlx5_get_roce_state (struct mlx5_core_dev *dev) { -struct devlink *devlink =priv_to_devlink (dev); -union devlink_param_value val; -int err; - - err =devlink_param_driverinit_value_get (devlink, -DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE , - &val); -return err ?MLX5_CAP_GEN (dev, roce) : val.vbool; +if (MLX5_CAP_GEN (dev, roce_rw_supported)) +return MLX5_CAP_GEN (dev, roce); + +/* If RoCE cap is read-only in FW, get RoCE state from devlink +* in order to support RoCE enable/disable feature +*/ +return mlx5_is_roce_on (dev); }#endif /* MLX5_DRIVER_H */
include/linux/mlx5/mlx5_ifc.h +21 -4
@@ -1804,7 +1804,14 @@ struct mlx5_ifc_cmd_hca_cap_2_bits {u8 max_reformat_remove_size[0x8 ];u8 max_reformat_remove_offset[0x8 ]; -u8 reserved_at_c0[0x740 ]; +u8 reserved_at_c0[0x160 ]; + +u8 reserved_at_220[0x1 ]; +u8 sw_vhca_id_valid[0x1 ]; +u8 sw_vhca_id[0xe ]; +u8 reserved_at_230[0x10 ]; + +u8 reserved_at_240[0x5c0 ]; };enum mlx5_ifc_flow_destination_type {
@@ -3715,6 +3722,11 @@ struct mlx5_ifc_rmpc_bits {struct mlx5_ifc_wq_bits wq; }; +enum { +VHCA_ID_TYPE_HW =0 , +VHCA_ID_TYPE_SW =1 , +}; +struct mlx5_ifc_nic_vport_context_bits {u8 reserved_at_0[0x5 ];u8 min_wqe_inline_mode[0x3 ];
@@ -3731,8 +3743,8 @@ struct mlx5_ifc_nic_vport_context_bits {u8 event_on_mc_address_change[0x1 ];u8 event_on_uc_address_change[0x1 ]; -u8 reserved_at_40[0xc ]; - +u8 vhca_id_type[0x1 ]; +u8 reserved_at_41[0xb ];u8 affiliation_criteria[0x4 ];u8 affiliated_vhca_id[0x10 ];
@@ -7189,7 +7201,12 @@ struct mlx5_ifc_init_hca_in_bits {u8 reserved_at_20[0x10 ];u8 op_mod[0x10 ]; -u8 reserved_at_40[0x40 ]; +u8 reserved_at_40[0x20 ]; + +u8 reserved_at_60[0x2 ]; +u8 sw_vhca_id[0xe ]; +u8 reserved_at_70[0x10 ]; +u8 sw_owner_id[4 ][0x20 ]; };
net/bluetooth/mgmt.c +42 -29
96 lines not on this page · raw message
net/dsa/tag_hellcreek.c +1 -1
@@ -45,7 +45,7 @@ static struct sk_buff *hellcreek_rcv(struct sk_buff *skb, skb->dev =dsa_master_find_slave (dev,0 , port);if (!skb->dev) { -netdev_warn (dev,"Failed to get source port: %d\n" , port); +netdev_warn_once (dev,"Failed to get source port: %d\n" , port);return NULL ; }