Linux 6.6.127
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.6.127 kernel.
All users of the 6.6 kernel series must upgrade.
The updated 6.6.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.6.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/loongarch/include/asm/addrspace.h | 4 arch/loongarch/include/asm/io.h | 10 +- arch/loongarch/include/asm/kasan.h | 11 ++ arch/loongarch/include/asm/loongarch.h | 10 +- arch/loongarch/include/asm/stackframe.h | 11 ++ arch/loongarch/kernel/head.S | 11 -- arch/loongarch/mm/kasan_init.c | 76 ++++++++------- arch/loongarch/power/suspend_asm.S | 6 - drivers/bus/fsl-mc/fsl-mc-bus.c | 10 +- drivers/firmware/efi/libstub/loongarch.c | 2 drivers/gpio/gpio-sprd.c | 8 - drivers/gpio/gpiolib-acpi.c | 1 drivers/gpu/drm/tegra/hdmi.c | 4 drivers/gpu/drm/tegra/sor.c | 4 drivers/net/bareudp.c | 4 drivers/net/geneve.c | 4 drivers/net/wireguard/device.c | 1 drivers/pci/endpoint/pci-ep-cfs.c | 16 +-- drivers/platform/x86/amd/pmc/pmc-quirks.c | 7 + drivers/platform/x86/classmate-laptop.c | 32 ++++++ drivers/platform/x86/panasonic-laptop.c | 4 drivers/scsi/qla2xxx/qla_bsg.c | 28 +++-- drivers/usb/serial/option.c | 6 + drivers/video/fbdev/riva/riva_hw.c | 3 drivers/video/fbdev/smscufx.c | 8 + fs/f2fs/data.c | 26 +++-- fs/f2fs/f2fs.h | 1 fs/f2fs/gc.c | 1 fs/f2fs/node.c | 14 ++ fs/f2fs/super.c | 27 +++++ fs/f2fs/sysfs.c | 60 ++++++++++-- fs/romfs/super.c | 5 - include/asm-generic/tlb.h | 77 +++++++++++++++ include/linux/hugetlb.h | 17 ++- include/linux/mm_types.h | 6 + include/net/ip_tunnels.h | 13 +- kernel/cgroup/cpuset.c | 2 mm/hugetlb.c | 146 +++++++++++++++--------------- mm/mmu_gather.c | 33 ++++++ mm/rmap.c | 25 +++-- sound/pci/hda/patch_realtek.c | 5 + sound/soc/amd/yc/acp6x-mach.c | 14 ++ sound/soc/codecs/cs35l45.c | 2 sound/soc/codecs/cs42l43-jack.c | 37 ++++++- sound/soc/fsl/fsl_xcvr.c | 3 sound/soc/intel/boards/sof_es8336.c | 9 + 47 files changed, 591 insertions(+), 215 deletions(-)
Alban Bedel (1):
gpiolib: acpi: Fix gpio count with string references
Anatolii Shirykalov (1):
ASoC: amd: yc: Add ASUS ExpertBook PM1503CDA to quirks list
Anil Gurumurthy (1):
scsi: qla2xxx: Fix bsg_done() causing double free
Brahmajit Das (1):
drm/tegra: hdmi: sor: Fix error: variable ‘j’ set but not used
Chao Yu (2):
f2fs: fix to avoid UAF in f2fs_write_end_io()
f2fs: fix to avoid mapping wrong physical block for swapfile
Charles Keepax (1):
ASoC: cs42l43: Correct handling of 3-pole jack load detection
Chelsy Ratnawat (1):
bus: fsl-mc: Replace snprintf and sprintf with sysfs_emit in sysfs show functions
Chen Ridong (1):
cpuset: Fix missing adaptation for cpuset_is_populated
Christophe JAILLET (1):
PCI: endpoint: Remove unused field in struct pci_epf_group
Daniel Borkmann (1):
Revert "wireguard: device: enable threaded NAPI"
David Hildenbrand (Red Hat) (3):
mm/hugetlb: fix hugetlb_pmd_shared()
mm/hugetlb: fix two comments related to huge_pmd_unshare() mm/hugetlb: fix excessive IPI broadcasts when unsharing PMD tables using mmu_gather
Deepanshu Kartikey (1):
romfs: check sb_set_blocksize() return value
Dirk Su (1):
ASoC: amd: yc: Add quirk for HP 200 G2a 16
Fabio Porcedda (1):
USB: serial: option: add Telit FN920C04 RNDIS compositions
Greg Kroah-Hartman (2):
fbdev: smscufx: properly copy ioctl memory to kernelspace Linux 6.6.127
Guangshuo Li (1):
fbdev: rivafb: fix divide error in nv3_arb()
Gui-Dong Han (1):
bus: fsl-mc: fix use-after-free in driver_override_show()
Huacai Chen (1):
LoongArch: Add writecombine support for DMW-based ioremap()
Jane Chu (1):
mm/hugetlb: fix copy_hugetlb_page_range() to use ->pt_share_count
Kanglong Wang (1):
LoongArch: Add WriteCombine shadow mapping in KASAN
Liu Song (1):
PCI: endpoint: Avoid creating sub-groups asynchronously
Menglong Dong (1):
net: tunnel: make skb_vlan_inet_prepare() return drop reasons
Rafael J. Wysocki (2):
platform/x86: classmate-laptop: Add missing NULL pointer checks platform/x86: panasonic-laptop: Fix sysfs group leak in error path
Ricardo Rivera-Matos (1):
ASoC: cs35l45: Corrects ASP_TX5 DAPM widget channel
Tagir Garaev (1):
ASoC: Intel: sof_es8336: Add DMI quirk for Huawei BOD-WXX9
Tiezhu Yang (1):
LoongArch: Rework KASAN initialization for PTW-enabled systems
Tim Guttzeit (1):
ALSA: hda/realtek: Fix headset mic for TongFang X6AR55xU
Wenjie Qi (1):
f2fs: fix zoned block device information initialization
Xuewen Yan (1):
gpio: sprd: Change sprd_gpio lock to raw_spin_lock
Yongpeng Yang (2):
f2fs: fix out-of-bounds access in sysfs attribute read/write
f2fs: fix IS_CHECKPOINTED flag inconsistency issue caused by concurrent atomic commit and checkpoint writes
Zhang Heng (1):
ALSA: hda/realtek: Add quirk for Inspur S14-G1
Zhiguo Niu (1):
f2fs: fix to add gc count stat in f2fs_gc_range
Ziyi Guo (1):
ASoC: fsl_xcvr: fix missing lock in fsl_xcvr_mode_put()
gongqi (1):
platform/x86/amd/pmc: Add quirk for MECHREVO Wujie 15X Pro
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 6 -SUBLEVEL = 126 +SUBLEVEL = 127 EXTRAVERSION = NAME = Pinguïn Aangedreven
arch/loongarch/include/asm/addrspace.h +4 -0
@@ -36,6 +36,10 @@ extern unsigned long vm_map_base;#define UNCACHE_BASE CSR_DMW0_BASE#endif +#ifndef WRITECOMBINE_BASE +#define WRITECOMBINE_BASE CSR_DMW2_BASE +#endif +#define DMW_PABITS 48#define TO_PHYS_MASK ((1ULL << DMW_PABITS) - 1)
arch/loongarch/include/asm/io.h +8 -2
@@ -30,10 +30,16 @@ extern void __init early_iounmap(void __iomem *addr, unsigned long size);static inline void __iomem *ioremap_prot (phys_addr_t offset,unsigned long size,unsigned long prot_val) { -if (prot_val & _CACHE_CC) +switch (prot_val & _CACHE_MASK) { +case _CACHE_CC:return (void __iomem *)(unsigned long )(CACHE_BASE + offset); -else +case _CACHE_SUC:return (void __iomem *)(unsigned long )(UNCACHE_BASE + offset); +case _CACHE_WUC: +return (void __iomem *)(unsigned long )(WRITECOMBINE_BASE + offset); +default : +return NULL ; + } }#define ioremap (offset, size) \
arch/loongarch/include/asm/kasan.h +10 -1
@@ -25,6 +25,7 @@/* 64-bit segment value. */ #define XKPRANGE_UC_SEG (0x8000)#define XKPRANGE_CC_SEG (0x9000) +#define XKPRANGE_WC_SEG (0xa000)#define XKVRANGE_VC_SEG (0xffff)/* Cached */
@@ -41,10 +42,17 @@#define XKPRANGE_UC_SHADOW_SIZE (XKPRANGE_UC_SIZE >> KASAN_SHADOW_SCALE_SHIFT)#define XKPRANGE_UC_SHADOW_END (XKPRANGE_UC_KASAN_OFFSET + XKPRANGE_UC_SHADOW_SIZE) +/* WriteCombine */ +#define XKPRANGE_WC_START WRITECOMBINE_BASE +#define XKPRANGE_WC_SIZE XRANGE_SIZE +#define XKPRANGE_WC_KASAN_OFFSET XKPRANGE_UC_SHADOW_END +#define XKPRANGE_WC_SHADOW_SIZE (XKPRANGE_WC_SIZE >> KASAN_SHADOW_SCALE_SHIFT) +#define XKPRANGE_WC_SHADOW_END (XKPRANGE_WC_KASAN_OFFSET + XKPRANGE_WC_SHADOW_SIZE) +/* VMALLOC (Cached or UnCached) */ #define XKVRANGE_VC_START MODULES_VADDR#define XKVRANGE_VC_SIZE round_up(KFENCE_AREA_END - MODULES_VADDR + 1, PGDIR_SIZE) -#define XKVRANGE_VC_KASAN_OFFSET XKPRANGE_UC_SHADOW_END +#define XKVRANGE_VC_KASAN_OFFSET XKPRANGE_WC_SHADOW_END#define XKVRANGE_VC_SHADOW_SIZE (XKVRANGE_VC_SIZE >> KASAN_SHADOW_SCALE_SHIFT)#define XKVRANGE_VC_SHADOW_END (XKVRANGE_VC_KASAN_OFFSET + XKVRANGE_VC_SHADOW_SIZE)
@@ -55,6 +63,7 @@#define XKPRANGE_CC_SHADOW_OFFSET (KASAN_SHADOW_START + XKPRANGE_CC_KASAN_OFFSET)#define XKPRANGE_UC_SHADOW_OFFSET (KASAN_SHADOW_START + XKPRANGE_UC_KASAN_OFFSET) +#define XKPRANGE_WC_SHADOW_OFFSET (KASAN_SHADOW_START + XKPRANGE_WC_KASAN_OFFSET)#define XKVRANGE_VC_SHADOW_OFFSET (KASAN_SHADOW_START + XKVRANGE_VC_KASAN_OFFSET)extern bool kasan_early_stage;
arch/loongarch/include/asm/loongarch.h +9 -1
@@ -856,7 +856,7 @@#define LOONGARCH_CSR_DMWIN2 0x182/* 64 direct map win2: MEM */ #define LOONGARCH_CSR_DMWIN3 0x183/* 64 direct map win3: MEM */ -/* Direct Map window 0/1 */ +/* Direct Map window 0/1/2/3 */ #define CSR_DMW0_PLV0 _CONST64_(1 << 0)#define CSR_DMW0_VSEG _CONST64_(0x8000)#define CSR_DMW0_BASE (CSR_DMW0_VSEG << DMW_PABITS)
@@ -868,6 +868,14 @@#define CSR_DMW1_BASE (CSR_DMW1_VSEG << DMW_PABITS)#define CSR_DMW1_INIT (CSR_DMW1_BASE | CSR_DMW1_MAT | CSR_DMW1_PLV0) +#define CSR_DMW2_PLV0 _CONST64_(1 << 0) +#define CSR_DMW2_MAT _CONST64_(2 << 4) +#define CSR_DMW2_VSEG _CONST64_(0xa000) +#define CSR_DMW2_BASE (CSR_DMW2_VSEG << DMW_PABITS) +#define CSR_DMW2_INIT (CSR_DMW2_BASE | CSR_DMW2_MAT | CSR_DMW2_PLV0) + +#define CSR_DMW3_INIT 0x0 +/* Performance Counter registers */ #define LOONGARCH_CSR_PERFCTRL0 0x200/* 32 perf event 0 config */ #define LOONGARCH_CSR_PERFCNTR0 0x201/* 64 perf event 0 count value */
arch/loongarch/include/asm/stackframe.h +11 -0
@@ -37,6 +37,17 @@ cfi_restore \reg \offset \docfi .endm + .macro SETUP_DMWINS temp + li.d \temp, CSR_DMW0_INIT # WUC, PLV0, 0x8000 xxxx xxxx xxxx + csrwr \temp, LOONGARCH_CSR_DMWIN0 + li.d \temp, CSR_DMW1_INIT # CAC, PLV0, 0x9000 xxxx xxxx xxxx + csrwr \temp, LOONGARCH_CSR_DMWIN1 + li.d \temp, CSR_DMW2_INIT # WUC, PLV0, 0xa000 xxxx xxxx xxxx + csrwr \temp, LOONGARCH_CSR_DMWIN2 + li.d \temp, CSR_DMW3_INIT # 0x0, unused + csrwr \temp, LOONGARCH_CSR_DMWIN3 + .endm + /* Jump to the runtime virtual address. */ .macro JUMP_VIRT_ADDR temp1 temp2 li.d \temp1, CACHE_BASE
arch/loongarch/kernel/head.S +2 -9
@@ -44,11 +44,7 @@ SYM_DATA(kernel_fsize, .long _kernel_fsize); SYM_CODE_START(kernel_entry) # kernel entry point /* Config direct window and set PG */ - li.d t0, CSR_DMW0_INIT # UC, PLV0, 0x8000 xxxx xxxx xxxx - csrwr t0, LOONGARCH_CSR_DMWIN0 - li.d t0, CSR_DMW1_INIT # CA, PLV0, 0x9000 xxxx xxxx xxxx - csrwr t0, LOONGARCH_CSR_DMWIN1 - + SETUP_DMWINS t0 JUMP_VIRT_ADDR t0, t1 /* Enable PG */
@@ -119,11 +115,8 @@ SYM_CODE_END(kernel_entry) * function after setting up the stack and tp registers. */ SYM_CODE_START(smpboot_entry) - li.d t0, CSR_DMW0_INIT # UC, PLV0 - csrwr t0, LOONGARCH_CSR_DMWIN0 - li.d t0, CSR_DMW1_INIT # CA, PLV0 - csrwr t0, LOONGARCH_CSR_DMWIN1 + SETUP_DMWINS t0 JUMP_VIRT_ADDR t0, t1 /* Enable PG */
arch/loongarch/mm/kasan_init.c +42 -34
112 lines not on this page · raw message
arch/loongarch/power/suspend_asm.S +1 -5
@@ -73,11 +73,7 @@ SYM_FUNC_START(loongarch_suspend_enter) * Reload all of the registers and return. */ SYM_INNER_LABEL(loongarch_wakeup_start, SYM_L_GLOBAL) - li.d t0, CSR_DMW0_INIT # UC, PLV0 - csrwr t0, LOONGARCH_CSR_DMWIN0 - li.d t0, CSR_DMW1_INIT # CA, PLV0 - csrwr t0, LOONGARCH_CSR_DMWIN1 - + SETUP_DMWINS t0 JUMP_VIRT_ADDR t0, t1 /* Enable PG */
drivers/bus/fsl-mc/fsl-mc-bus.c +7 -3
@@ -175,8 +175,8 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, {struct fsl_mc_device *mc_dev =to_fsl_mc_device (dev); -return sprintf (buf,"fsl-mc:v%08Xd%s\n" , mc_dev->obj_desc.vendor, - mc_dev->obj_desc.type); +return sysfs_emit (buf,"fsl-mc:v%08Xd%s\n" , mc_dev->obj_desc.vendor, + mc_dev->obj_desc.type); }static DEVICE_ATTR_RO (modalias);
@@ -201,8 +201,12 @@ static ssize_t driver_override_show(struct device *dev, struct device_attribute *attr, char *buf) { struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev); +ssize_t len; -return snprintf (buf,PAGE_SIZE ,"%s\n" , mc_dev->driver_override); +device_lock (dev); + len =sysfs_emit (buf,"%s\n" , mc_dev->driver_override); +device_unlock (dev); +return len; }static DEVICE_ATTR_RW (driver_override);
drivers/firmware/efi/libstub/loongarch.c +2 -0
@@ -74,6 +74,8 @@ efi_status_t efi_boot_kernel(void *handle, efi_loaded_image_t *image,/* Config Direct Mapping */ csr_write64 (CSR_DMW0_INIT ,LOONGARCH_CSR_DMWIN0 );csr_write64 (CSR_DMW1_INIT ,LOONGARCH_CSR_DMWIN1 ); +csr_write64 (CSR_DMW2_INIT ,LOONGARCH_CSR_DMWIN2 ); +csr_write64 (CSR_DMW3_INIT ,LOONGARCH_CSR_DMWIN3 ); real_kernel_entry = (void *)kernel_entry_address (kernel_addr, image);
drivers/gpio/gpio-sprd.c +4 -4
@@ -35,7 +35,7 @@struct sprd_gpio {struct gpio_chip chip;void __iomem *base; -spinlock_t lock; +raw_spinlock_t lock;int irq; };
@@ -54,7 +54,7 @@ static void sprd_gpio_update(struct gpio_chip *chip, unsigned int offset,unsigned long flags;u32 tmp; -spin_lock_irqsave (&sprd_gpio->lock, flags); +raw_spin_lock_irqsave (&sprd_gpio->lock, flags); tmp =readl_relaxed (base + reg);if (val)
@@ -63,7 +63,7 @@ static void sprd_gpio_update(struct gpio_chip *chip, unsigned int offset, tmp &= ~BIT (SPRD_GPIO_BIT (offset));writel_relaxed (tmp, base + reg); -spin_unlock_irqrestore (&sprd_gpio->lock, flags); +raw_spin_unlock_irqrestore (&sprd_gpio->lock, flags); }static int sprd_gpio_read (struct gpio_chip *chip,unsigned int offset,u16 reg)
@@ -234,7 +234,7 @@ static int sprd_gpio_probe(struct platform_device *pdev)if (IS_ERR (sprd_gpio->base))return PTR_ERR (sprd_gpio->base); -spin_lock_init (&sprd_gpio->lock); +raw_spin_lock_init (&sprd_gpio->lock); sprd_gpio->chip.label =dev_name (&pdev->dev); sprd_gpio->chip.ngpio =SPRD_GPIO_NR ;
drivers/gpio/gpiolib-acpi.c +1 -0
@@ -1417,6 +1417,7 @@ static int acpi_gpio_package_count(const union acpi_object *obj)while (element < end) {switch (element->type) {case ACPI_TYPE_LOCAL_REFERENCE : +case ACPI_TYPE_STRING : element +=3 ; fallthrough;case ACPI_TYPE_INTEGER :
drivers/gpu/drm/tegra/hdmi.c +2 -2
@@ -656,7 +656,7 @@ static void tegra_hdmi_write_infopack(struct tegra_hdmi *hdmi, const void *data, {const u8 *ptr = data;unsigned long offset; -size_t i, j; +size_t i;u32 value;switch (ptr[0 ]) {
@@ -689,7 +689,7 @@ static void tegra_hdmi_write_infopack(struct tegra_hdmi *hdmi, const void *data,* - subpack_low: bytes 0 - 3 * - subpack_high: bytes 4 - 6 (with byte 7 padded to 0x00) */ -for (i =3 , j =0 ; i < size; i +=7 , j +=8 ) { +for (i =3 ; i < size; i +=7 ) {size_t rem = size - i, num =min_t (size_t, rem,4 ); value =tegra_hdmi_subpack (&ptr[i], num);
drivers/gpu/drm/tegra/sor.c +2 -2
@@ -1861,7 +1861,7 @@ static void tegra_sor_hdmi_write_infopack(struct tegra_sor *sor, {const u8 *ptr = data;unsigned long offset; -size_t i, j; +size_t i;u32 value;switch (ptr[0 ]) {
@@ -1894,7 +1894,7 @@ static void tegra_sor_hdmi_write_infopack(struct tegra_sor *sor,* - subpack_low: bytes 0 - 3 * - subpack_high: bytes 4 - 6 (with byte 7 padded to 0x00) */ -for (i =3 , j =0 ; i < size; i +=7 , j +=8 ) { +for (i =3 ; i < size; i +=7 ) {size_t rem = size - i, num =min_t (size_t, rem,4 ); value =tegra_sor_hdmi_subpack (&ptr[i], num);
drivers/net/bareudp.c +2 -2
@@ -319,7 +319,7 @@ static int bareudp_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be32 saddr;int err; -if (!skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB ))) +if (skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB )))return -EINVAL ;if (!sock)
@@ -385,7 +385,7 @@ static int bareudp6_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB ))) +if (skb_vlan_inet_prepare (skb, skb->protocol !=htons (ETH_P_TEB )))return -EINVAL ;if (!sock)
drivers/net/geneve.c +2 -2
@@ -927,7 +927,7 @@ static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, inner_proto_inherit)) +if (skb_vlan_inet_prepare (skb, inner_proto_inherit))return -EINVAL ; sport =udp_flow_src_port (geneve->net, skb,1 ,USHRT_MAX , true);
@@ -1026,7 +1026,7 @@ static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev,__be16 sport;int err; -if (!skb_vlan_inet_prepare (skb, inner_proto_inherit)) +if (skb_vlan_inet_prepare (skb, inner_proto_inherit))return -EINVAL ; sport =udp_flow_src_port (geneve->net, skb,1 ,USHRT_MAX , true);
drivers/net/wireguard/device.c +0 -1
@@ -369,7 +369,6 @@ static int wg_newlink(struct net *src_net, struct net_device *dev,if (ret <0 ) goto err_free_handshake_queue; -dev_set_threaded (dev, true); ret =register_netdevice (dev);if (ret <0 ) goto err_uninit_ratelimiter;
drivers/pci/endpoint/pci-ep-cfs.c +5 -11
@@ -23,8 +23,6 @@ struct pci_epf_group {struct config_group group;struct config_group primary_epc_group;struct config_group secondary_epc_group; -struct config_group *type_group; -struct delayed_work cfs_work;struct pci_epf *epf;int index; };
@@ -101,7 +99,7 @@ static struct config_group secondary_epc_group = &epf_group->secondary_epc_group;config_group_init_type_name (secondary_epc_group,"secondary" , &pci_secondary_epc_type); -configfs_register_group (&epf_group->group, secondary_epc_group); +configfs_add_default_group (secondary_epc_group, &epf_group->group);return secondary_epc_group; }
@@ -161,7 +159,7 @@ static struct config_groupconfig_group_init_type_name (primary_epc_group,"primary" , &pci_primary_epc_type); -configfs_register_group (&epf_group->group, primary_epc_group); +configfs_add_default_group (primary_epc_group, &epf_group->group);return primary_epc_group; }
@@ -562,15 +560,13 @@ static void pci_ep_cfs_add_type_group(struct pci_epf_group *epf_group)return ; } -configfs_register_group (&epf_group->group, group); +configfs_add_default_group (group, &epf_group->group); } -static void pci_epf_cfs_work (struct work_struct *work) +static void pci_epf_cfs_add_sub_groups (struct pci_epf_group *epf_group) { -struct pci_epf_group *epf_group;struct config_group *group; - epf_group = container_of(work, struct pci_epf_group, cfs_work.work); group =pci_ep_cfs_add_primary_group (epf_group);if (IS_ERR (group)) {pr_err ("failed to create 'primary' EPC interface\n" );
@@ -629,9 +625,7 @@ static struct config_group *pci_epf_make(struct config_group *group,kfree (epf_name); -INIT_DELAYED_WORK (&epf_group->cfs_work, pci_epf_cfs_work); -queue_delayed_work (system_wq, &epf_group->cfs_work, -msecs_to_jiffies (1 )); +pci_epf_cfs_add_sub_groups (epf_group);return &epf_group->group;
drivers/platform/x86/amd/pmc/pmc-quirks.c +7 -0
@@ -296,6 +296,13 @@ static const struct dmi_system_id fwbug_list[] = { DMI_MATCH(DMI_BOARD_NAME, "XxKK4NAx_XxSP4NAx"), } }, + { + .ident = "MECHREVO Wujie 15X Pro", + .driver_data = &quirk_spurious_8042, + .matches = { + DMI_MATCH(DMI_BOARD_NAME, "WUJIE Series-X5SP4NAG"), + } + }, {} };
drivers/platform/x86/classmate-laptop.c +32 -0
@@ -208,7 +208,12 @@ static ssize_t cmpc_accel_sensitivity_show_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ;return sprintf (buf,"%d\n" , accel->sensitivity); }
@@ -225,7 +230,12 @@ static ssize_t cmpc_accel_sensitivity_store_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ; r =kstrtoul (buf,0 , &sensitivity);if (r)
@@ -257,7 +267,12 @@ static ssize_t cmpc_accel_g_select_show_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ;return sprintf (buf,"%d\n" , accel->g_select); }
@@ -274,7 +289,12 @@ static ssize_t cmpc_accel_g_select_store_v4(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ; r =kstrtoul (buf,0 , &g_select);if (r)
@@ -303,6 +323,8 @@ static int cmpc_accel_open_v4(struct input_dev *input) acpi =to_acpi_device (input->dev.parent); accel =dev_get_drvdata (&input->dev); +if (!accel) +return -ENXIO ;cmpc_accel_set_sensitivity_v4 (acpi->handle, accel->sensitivity);cmpc_accel_set_g_select_v4 (acpi->handle, accel->g_select);
@@ -551,7 +573,12 @@ static ssize_t cmpc_accel_sensitivity_show(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ;return sprintf (buf,"%d\n" , accel->sensitivity); }
@@ -568,7 +595,12 @@ static ssize_t cmpc_accel_sensitivity_store(struct device *dev, acpi =to_acpi_device (dev); inputdev =dev_get_drvdata (&acpi->dev); +if (!inputdev) +return -ENXIO ; + accel =dev_get_drvdata (&inputdev->dev); +if (!accel) +return -ENXIO ; r =kstrtoul (buf,0 , &sensitivity);if (r)
drivers/platform/x86/panasonic-laptop.c +3 -1
@@ -1077,7 +1077,7 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) PLATFORM_DEVID_NONE, NULL, 0);if (IS_ERR (pcc->platform)) { result =PTR_ERR (pcc->platform); - goto out_backlight; + goto out_sysfs; } result =device_create_file (&pcc->platform->dev, &dev_attr_cdpower);
@@ -1093,6 +1093,8 @@ static int acpi_pcc_hotkey_add(struct acpi_device *device) out_platform:platform_device_unregister (pcc->platform); +out_sysfs: +sysfs_remove_group (&device->dev.kobj, &pcc_attr_group); out_backlight:backlight_device_unregister (pcc->backlight); out_input:
drivers/scsi/qla2xxx/qla_bsg.c +17 -11
@@ -1546,8 +1546,9 @@ qla2x00_update_optrom(struct bsg_job *bsg_job) ha->optrom_buffer =NULL ; ha->optrom_state =QLA_SWAITING ;mutex_unlock (&ha->optrom_mutex); -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!rval) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);return rval; }
@@ -2612,8 +2613,9 @@ qla2x00_manage_host_stats(struct bsg_job *bsg_job) sizeof(struct ql_vnd_mng_host_stats_resp)); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);return ret; }
@@ -2702,8 +2704,9 @@ qla2x00_get_host_stats(struct bsg_job *bsg_job) bsg_job->reply_payload.sg_cnt, data, response_len); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);kfree (data); host_stat_out:
@@ -2802,8 +2805,9 @@ qla2x00_get_tgt_stats(struct bsg_job *bsg_job) bsg_job->reply_payload.sg_cnt, data, response_len); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len); tgt_stat_out:kfree (data);
@@ -2864,8 +2868,9 @@ qla2x00_manage_host_port(struct bsg_job *bsg_job) bsg_job->reply_payload.sg_cnt, &rsp_data, sizeof(struct ql_vnd_mng_host_port_resp)); bsg_reply->result =DID_OK ; -bsg_job_done (bsg_job, bsg_reply->result, - bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, + bsg_reply->reply_payload_rcv_len);return ret; }
@@ -3240,7 +3245,8 @@ int qla2x00_mailbox_passthru(struct bsg_job *bsg_job) bsg_job->reply_len =sizeof (*bsg_job->reply); bsg_reply->result =DID_OK <<16 ; -bsg_job_done (bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len); +if (!ret) +bsg_job_done (bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len);kfree (req_data);
drivers/usb/serial/option.c +6 -0
@@ -1401,12 +1401,16 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(0) | RSVD(1) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a0, 0xff), /* Telit FN20C04 (rmnet) */ .driver_info = RSVD(0) | NCTRL(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a1, 0xff), /* Telit FN20C04 (RNDIS) */ + .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a2, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a3, 0xff), /* Telit FN920C04 (ECM) */ .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a4, 0xff), /* Telit FN20C04 (rmnet) */ .driver_info = RSVD(0) | NCTRL(3) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a6, 0xff), /* Telit FN920C04 (RNDIS) */ + .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a7, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10a8, 0xff), /* Telit FN920C04 (ECM) */
@@ -1415,6 +1419,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = RSVD(0) | NCTRL(2) | RSVD(3) | RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10aa, 0xff), /* Telit FN920C04 (MBIM) */ .driver_info = NCTRL(3) | RSVD(4) | RSVD(5) }, + { USB_DEVICE_INTERFACE_CLASS(TELIT_VENDOR_ID, 0x10ab, 0xff), /* Telit FN920C04 (RNDIS) */ + .driver_info = NCTRL(3) | RSVD(4) | RSVD(5) }, { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x30), /* Telit FE990B (rmnet) */ .driver_info = NCTRL(5) }, { USB_DEVICE_AND_INTERFACE_INFO(TELIT_VENDOR_ID, 0x10b0, 0xff, 0xff, 0x40) },
drivers/video/fbdev/riva/riva_hw.c +3 -0
@@ -436,6 +436,9 @@ static char nv3_arb(nv3_fifo_info * res_info, nv3_sim_state * state, nv3_arb_in vmisses =2 ; eburst_size = state->memory_width *1 ; mburst_size =32 ; +if (!state->mclk_khz) +return (0 ); + gns =1000000 * (gmisses*state->mem_page_miss + state->mem_latency)/state->mclk_khz; ainfo->by_gfacc = gns*ainfo->gdrain_rate/1000000 ; ainfo->wcmocc =0 ;
drivers/video/fbdev/smscufx.c +6 -2
@@ -988,7 +988,6 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg) {struct ufx_data *dev = info->par; -struct dloarea *area =NULL ;if (!atomic_read (&dev->usb_active))return 0 ;
@@ -1003,6 +1002,10 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd,/* TODO: Help propose a standard fb.h ioctl to report mmap damage */ if (cmd ==UFX_IOCTL_REPORT_DAMAGE ) { + struct dloarea *area __free(kfree) = kmalloc(sizeof(*area), GFP_KERNEL); +if (!area) +return -ENOMEM ; +/* If we have a damage-aware client, turn fb_defio "off" * To avoid perf imact of unnecessary page fault handling. * Done by resetting the delay for this fb_info to a very
@@ -1012,7 +1015,8 @@ static int ufx_ops_ioctl(struct fb_info *info, unsigned int cmd,if (info->fbdefio) info->fbdefio->delay =UFX_DEFIO_WRITE_DISABLE ; - area = (struct dloarea *)arg; +if (copy_from_user (area, (u8 __user *)arg,sizeof (*area))) +return -EFAULT ;if (area->x <0 ) area->x =0 ;
fs/f2fs/data.c +16 -10
@@ -358,14 +358,20 @@ static void f2fs_write_end_io(struct bio *bio) page->index != nid_of_node(page));dec_page_count (sbi, type); + +/* +* we should access sbi before end_page_writeback() to +* avoid racing w/ kill_f2fs_super() +*/ +if (type ==F2FS_WB_CP_DATA && !get_pages (sbi, type) && +wq_has_sleeper (&sbi->cp_wait)) +wake_up (&sbi->cp_wait); +if (f2fs_in_warm_node_list (sbi, page))f2fs_del_fsync_node_entry (sbi, page);clear_page_private_gcing (page);end_page_writeback (page); } -if (!get_pages (sbi,F2FS_WB_CP_DATA ) && -wq_has_sleeper (&sbi->cp_wait)) -wake_up (&sbi->cp_wait);bio_put (bio); }
@@ -3934,6 +3940,7 @@ static int check_swap_activate(struct swap_info_struct *sis,while (cur_lblock < last_lblock && cur_lblock < sis->max) {struct f2fs_map_blocks map; +bool last_extent = false; retry:cond_resched ();
@@ -3959,11 +3966,10 @@ static int check_swap_activate(struct swap_info_struct *sis, pblock = map.m_pblk; nr_pblocks = map.m_len; -if ((pblock -SM_I (sbi)->main_blkaddr) % blks_per_sec || - nr_pblocks % blks_per_sec || - !f2fs_valid_pinned_area (sbi, pblock)) { -bool last_extent = false; - +if (!last_extent && + ((pblock -SM_I (sbi)->main_blkaddr) % blks_per_sec || + nr_pblocks % blks_per_sec || + !f2fs_valid_pinned_area (sbi, pblock))) { not_aligned++; nr_pblocks =roundup (nr_pblocks, blks_per_sec);
@@ -3984,8 +3990,8 @@ static int check_swap_activate(struct swap_info_struct *sis, goto out; } -if (!last_extent) - goto retry; +/* lookup block mapping info after block migration */ + goto retry; }if (cur_lblock + nr_pblocks >= sis->max)
fs/f2fs/f2fs.h +1 -0
@@ -1567,6 +1567,7 @@ struct f2fs_sb_info {#ifdef CONFIG_BLK_DEV_ZONED unsigned int blocks_per_blkz;/* F2FS blocks per zone */ +unsigned int max_open_zones;/* max open zone resources of the zoned device */ #endif /* for node-related operations */
fs/f2fs/gc.c +1 -0
@@ -1998,6 +1998,7 @@ int f2fs_gc_range(struct f2fs_sb_info *sbi,unsigned int segno;unsigned int gc_secs = dry_run_sections; +stat_inc_gc_call_count (sbi,FOREGROUND );for (segno = start_seg; segno <= end_seg; segno +=SEGS_PER_SEC (sbi)) {struct gc_inode_list gc_list = { .ilist =LIST_HEAD_INIT (gc_list.ilist),
fs/f2fs/node.c +10 -4
@@ -1696,8 +1696,13 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted, goto redirty_out; } -if (atomic && !test_opt (sbi,NOBARRIER ) && !f2fs_sb_has_blkzoned (sbi)) - fio.op_flags |=REQ_PREFLUSH |REQ_FUA ; +if (atomic) { +if (!test_opt (sbi,NOBARRIER ) && !f2fs_sb_has_blkzoned (sbi)) + fio.op_flags |=REQ_PREFLUSH |REQ_FUA ; +if (IS_INODE (page)) +set_dentry_mark (page, +f2fs_need_dentry_mark (sbi,ino_of_node (page))); + }/* should add to global list before clearing PAGECACHE status */ if (f2fs_in_warm_node_list (sbi, page)) {
@@ -1852,8 +1857,9 @@ int f2fs_fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,if (is_inode_flag_set (inode,FI_DIRTY_INODE ))f2fs_update_inode (inode, page); -set_dentry_mark (page, -f2fs_need_dentry_mark (sbi, ino)); +if (!atomic) +set_dentry_mark (page, +f2fs_need_dentry_mark (sbi, ino)); }/* may be written by other thread */ if (!PageDirty (page))
fs/f2fs/super.c +27 -0
@@ -2359,6 +2359,17 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)if (err) goto restore_opts; +#ifdef CONFIG_BLK_DEV_ZONED +if (f2fs_sb_has_blkzoned (sbi) && + sbi->max_open_zones <F2FS_OPTION (sbi).active_logs) { +f2fs_err (sbi, +"zoned: max open zones %u is too small, need at least %u open zones" , + sbi->max_open_zones,F2FS_OPTION (sbi).active_logs); + err = -EINVAL ; + goto restore_opts; + } +#endif +/* flush outstanding errors before changing fs state */ flush_work (&sbi->s_error_work);
@@ -3902,11 +3913,24 @@ static int init_blkz_info(struct f2fs_sb_info *sbi, int devi)sector_t nr_sectors =bdev_nr_sectors (bdev);struct f2fs_report_zones_args rep_zone_arg;u64 zone_sectors; +unsigned int max_open_zones;int ret;if (!f2fs_sb_has_blkzoned (sbi))return 0 ; +if (bdev_is_zoned (FDEV (devi).bdev)) { + max_open_zones =bdev_max_open_zones (bdev); +if (max_open_zones && (max_open_zones < sbi->max_open_zones)) + sbi->max_open_zones = max_open_zones; +if (sbi->max_open_zones <F2FS_OPTION (sbi).active_logs) { +f2fs_err (sbi, +"zoned: max open zones %u is too small, need at least %u open zones" , + sbi->max_open_zones,F2FS_OPTION (sbi).active_logs); +return -EINVAL ; + } + } + zone_sectors =bdev_zone_sectors (bdev);if (sbi->blocks_per_blkz && sbi->blocks_per_blkz !=SECTOR_TO_BLOCK (zone_sectors))
@@ -4188,6 +4212,9 @@ static int f2fs_scan_devices(struct f2fs_sb_info *sbi) logical_blksize =bdev_logical_block_size (sbi->sb->s_bdev); sbi->aligned_blksize = true; +#ifdef CONFIG_BLK_DEV_ZONED + sbi->max_open_zones =UINT_MAX ; +#endif for (i =0 ; i < max_devices; i++) {if (i ==0 )
fs/f2fs/sysfs.c +52 -8
109 lines not on this page · raw message
fs/romfs/super.c +4 -1
@@ -467,7 +467,10 @@ static int romfs_fill_super(struct super_block *sb, struct fs_context *fc)#ifdef CONFIG_BLOCK if (!sb->s_mtd) { -sb_set_blocksize (sb,ROMBSIZE ); +if (!sb_set_blocksize (sb,ROMBSIZE )) { +errorf (fc,"romfs: unable to set blocksize\n" ); +return -EINVAL ; + } }else { sb->s_blocksize =ROMBSIZE ; sb->s_blocksize_bits =blksize_bits (ROMBSIZE );
include/asm-generic/tlb.h +75 -2
107 lines not on this page · raw message
include/linux/hugetlb.h +11 -6
@@ -241,8 +241,9 @@ pte_t *huge_pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,pte_t *huge_pte_offset (struct mm_struct *mm,unsigned long addr,unsigned long sz);unsigned long hugetlb_mask_last_page (struct hstate *h); -int huge_pmd_unshare (struct mm_struct *mm,struct vm_area_struct *vma, -unsigned long addr,pte_t *ptep); +int huge_pmd_unshare (struct mmu_gather *tlb,struct vm_area_struct *vma, +unsigned long addr,pte_t *ptep); +void huge_pmd_unshare_flush (struct mmu_gather *tlb,struct vm_area_struct *vma);void adjust_range_if_pmd_sharing_possible (struct vm_area_struct *vma,unsigned long *start,unsigned long *end);
@@ -304,13 +305,17 @@ static inline struct address_space *hugetlb_page_mapping_lock_write(return NULL ; } -static inline int huge_pmd_unshare (struct mm_struct *mm, -struct vm_area_struct *vma, -unsigned long addr,pte_t *ptep) +static inline int huge_pmd_unshare (struct mmu_gather *tlb, +struct vm_area_struct *vma,unsigned long addr,pte_t *ptep) {return 0 ; } +static inline void huge_pmd_unshare_flush (struct mmu_gather *tlb, +struct vm_area_struct *vma) +{ +} +static inline void adjust_range_if_pmd_sharing_possible (struct vm_area_struct *vma,unsigned long *start,unsigned long *end)
@@ -1247,7 +1252,7 @@ static inline __init void hugetlb_cma_reserve(int order)#ifdef CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING static inline bool hugetlb_pmd_shared (pte_t *pte) { -return page_count (virt_to_page (pte)) >1 ; +return ptdesc_pmd_is_shared (virt_to_ptdesc (pte)); }#else static inline bool hugetlb_pmd_shared (pte_t *pte)
include/linux/mm_types.h +6 -0
@@ -492,6 +492,11 @@ static inline int ptdesc_pmd_pts_count(struct ptdesc *ptdesc) {return atomic_read (&ptdesc->pt_share_count); } + +static inline bool ptdesc_pmd_is_shared (struct ptdesc *ptdesc) +{ +return !!ptdesc_pmd_pts_count (ptdesc); +}#else static inline void ptdesc_pmd_pts_init (struct ptdesc *ptdesc) {
@@ -1172,6 +1177,7 @@ static inline unsigned int mm_cid_size(void)struct mmu_gather ;extern void tlb_gather_mmu (struct mmu_gather *tlb,struct mm_struct *mm);extern void tlb_gather_mmu_fullmm (struct mmu_gather *tlb,struct mm_struct *mm); +void tlb_gather_mmu_vma (struct mmu_gather *tlb,struct vm_area_struct *vma);extern void tlb_finish_mmu (struct mmu_gather *tlb);struct vm_fault ;
include/net/ip_tunnels.h +8 -5
@@ -362,11 +362,12 @@ static inline bool pskb_inet_may_pull(struct sk_buff *skb)/* Variant of pskb_inet_may_pull(). */ -static inline bool skb_vlan_inet_prepare (struct sk_buff *skb, -bool inner_proto_inherit) +static inline enum skb_drop_reason +skb_vlan_inet_prepare (struct sk_buff *skb,bool inner_proto_inherit) {int nhlen =0 , maclen = inner_proto_inherit ?0 :ETH_HLEN ;__be16 type = skb->protocol; +enum skb_drop_reason reason;/* Essentially this is skb_protocol(skb, true) * And we get MAC len.
@@ -387,11 +388,13 @@ static inline bool skb_vlan_inet_prepare(struct sk_buff *skb,/* For ETH_P_IPV6/ETH_P_IP we make sure to pull * a base network header in skb->head. */ -if (!pskb_may_pull (skb, maclen + nhlen)) -return false; + reason =pskb_may_pull_reason (skb, maclen + nhlen); +if (reason) +return reason;skb_set_network_header (skb, maclen); -return true; + +return SKB_NOT_DROPPED_YET ; }static inline int ip_encap_hlen (struct ip_tunnel_encap *e)
kernel/cgroup/cpuset.c +1 -1
@@ -486,7 +486,7 @@ static inline bool partition_is_populated(struct cpuset *cs, cs->attach_in_progress)return true;if (!excluded_child && !cs->nr_subparts_cpus) -return cgroup_is_populated (cs->css.cgroup); +return cpuset_is_populated (cs);rcu_read_lock ();cpuset_for_each_descendant_pre (cp, pos_css, cs) {
mm/hugetlb.c +77 -69
309 lines not on this page · raw message
mm/mmu_gather.c +33 -0
@@ -9,6 +9,7 @@#include <linux/smp.h> #include <linux/swap.h> #include <linux/rmap.h> +#include <linux/hugetlb.h> #include <asm/pgalloc.h> #include <asm/tlb.h>
@@ -321,6 +322,7 @@ static void __tlb_gather_mmu(struct mmu_gather *tlb, struct mm_struct *mm, tlb->page_size =0 ;#endif + tlb->fully_unshared_tables =0 ;__tlb_reset_range (tlb);inc_tlb_flush_pending (tlb->mm); }
@@ -354,6 +356,31 @@ void tlb_gather_mmu_fullmm(struct mmu_gather *tlb, struct mm_struct *mm)__tlb_gather_mmu (tlb, mm, true); } +/** +* tlb_gather_mmu_vma - initialize an mmu_gather structure for operating on a +* single VMA +* @tlb: the mmu_gather structure to initialize +* @vma: the vm_area_struct +* +* Called to initialize an (on-stack) mmu_gather structure for operating on +* a single VMA. In contrast to tlb_gather_mmu(), calling this function will +* not require another call to tlb_start_vma(). In contrast to tlb_start_vma(), +* this function will *not* call flush_cache_range(). +* +* For hugetlb VMAs, this function will also initialize the mmu_gather +* page_size accordingly, not requiring a separate call to +* tlb_change_page_size(). +* +*/ +void tlb_gather_mmu_vma (struct mmu_gather *tlb,struct vm_area_struct *vma) +{ +tlb_gather_mmu (tlb, vma->vm_mm); +tlb_update_vma_flags (tlb, vma); +if (is_vm_hugetlb_page (vma)) +/* All entries have the same size. */ +tlb_change_page_size (tlb,huge_page_size (hstate_vma (vma))); +} +/** * tlb_finish_mmu - finish an mmu_gather structure * @tlb: the mmu_gather structure to finish
@@ -363,6 +390,12 @@ void tlb_gather_mmu_fullmm(struct mmu_gather *tlb, struct mm_struct *mm)*/ void tlb_finish_mmu (struct mmu_gather *tlb) { +/* +* We expect an earlier huge_pmd_unshare_flush() call to sort this out, +* due to complicated locking requirements with page table unsharing. +*/ +VM_WARN_ON_ONCE (tlb->fully_unshared_tables); +/* * If there are parallel threads are doing PTE changes on same range * under non-exclusive lock (e.g., mmap_lock read-side) but defer TLB
mm/rmap.c +17 -8
@@ -76,7 +76,7 @@#include <linux/userfaultfd_k.h> #include <linux/mm_inline.h> -#include <asm/tlbflush.h> +#include <asm/tlb.h> #define CREATE_TRACE_POINTS #include <trace/events/tlb.h>
@@ -1568,16 +1568,20 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma,* if unsuccessful. */ if (!anon) { +struct mmu_gather tlb; +VM_BUG_ON (!(flags &TTU_RMAP_LOCKED ));if (!hugetlb_vma_trylock_write (vma)) {page_vma_mapped_walk_done (&pvmw); ret = false;break ; } -if (huge_pmd_unshare (mm, vma, address, pvmw.pte)) { + +tlb_gather_mmu_vma (&tlb, vma); +if (huge_pmd_unshare (&tlb, vma, address, pvmw.pte)) {hugetlb_vma_unlock_write (vma); -flush_tlb_range (vma, - range.start, range.end); +huge_pmd_unshare_flush (&tlb, vma); +tlb_finish_mmu (&tlb);/* * The PMD table was unmapped, * consequently unmapping the folio.
@@ -1586,6 +1590,7 @@ static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma,break ; }hugetlb_vma_unlock_write (vma); +tlb_finish_mmu (&tlb); } pteval =huge_ptep_clear_flush (vma, address, pvmw.pte); }else {
@@ -1927,17 +1932,20 @@ static bool try_to_migrate_one(struct folio *folio, struct vm_area_struct *vma,* fail if unsuccessful. */ if (!anon) { +struct mmu_gather tlb; +VM_BUG_ON (!(flags &TTU_RMAP_LOCKED ));if (!hugetlb_vma_trylock_write (vma)) {page_vma_mapped_walk_done (&pvmw); ret = false;break ; } -if (huge_pmd_unshare (mm, vma, address, pvmw.pte)) { -hugetlb_vma_unlock_write (vma); -flush_tlb_range (vma, - range.start, range.end); +tlb_gather_mmu_vma (&tlb, vma); +if (huge_pmd_unshare (&tlb, vma, address, pvmw.pte)) { +hugetlb_vma_unlock_write (vma); +huge_pmd_unshare_flush (&tlb, vma); +tlb_finish_mmu (&tlb);/* * The PMD table was unmapped, * consequently unmapping the folio.
@@ -1946,6 +1954,7 @@ static bool try_to_migrate_one(struct folio *folio, struct vm_area_struct *vma,break ; }hugetlb_vma_unlock_write (vma); +tlb_finish_mmu (&tlb); }/* Nuke the hugetlb page table entry */ pteval =huge_ptep_clear_flush (vma, address, pvmw.pte);
sound/pci/hda/patch_realtek.c +5 -0
@@ -10650,6 +10650,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {SND_PCI_QUIRK (0x1ee7 ,0x2078 ,"HONOR BRB-X M1010" ,ALC2XX_FIXUP_HEADSET_MIC ),SND_PCI_QUIRK (0x1f66 ,0x0105 ,"Ayaneo Portable Game Player" ,ALC287_FIXUP_CS35L41_I2C_2 ),SND_PCI_QUIRK (0x2014 ,0x800a ,"Positivo ARN50" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ), +SND_PCI_QUIRK (0x2039 ,0x0001 ,"Inspur S14-G1" ,ALC295_FIXUP_CHROME_BOOK ),SND_PCI_QUIRK (0x2782 ,0x0214 ,"VAIO VJFE-CL" ,ALC269_FIXUP_LIMIT_INT_MIC_BOOST ),SND_PCI_QUIRK (0x2782 ,0x0228 ,"Infinix ZERO BOOK 13" ,ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13 ), SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO),
@@ -11102,6 +11103,10 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = { {0x12, 0x90a60140}, {0x19, 0x04a11030}, {0x21, 0x04211020}), + SND_HDA_PIN_QUIRK(0x10ec0274, 0x1d05, "TongFang", ALC274_FIXUP_HP_HEADSET_MIC, + {0x17, 0x90170110}, + {0x19, 0x03a11030}, + {0x21, 0x03211020}), SND_HDA_PIN_QUIRK(0x10ec0282, 0x1025, "Acer", ALC282_FIXUP_ACER_DISABLE_LINEOUT, ALC282_STANDARD_PINS, {0x12, 0x90a609c0},
sound/soc/amd/yc/acp6x-mach.c +14 -0
@@ -535,6 +535,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_PRODUCT_NAME, "15NBC1011"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"ASUSTeK COMPUTER INC." ), + DMI_MATCH(DMI_PRODUCT_NAME, "ASUS EXPERTBOOK PM1503CDA"), + } + }, { .driver_data = &acp6x_card, .matches = {
@@ -626,6 +633,13 @@ static const struct dmi_system_id yc_acp_quirk_table[] = { DMI_MATCH(DMI_BOARD_NAME, "8BD6"), } }, + { + .driver_data = &acp6x_card, + .matches = { +DMI_MATCH (DMI_BOARD_VENDOR ,"HP" ), + DMI_MATCH(DMI_BOARD_NAME, "8EE4"), + } + }, { .driver_data = &acp6x_card, .matches = {
sound/soc/codecs/cs35l45.c +1 -1
@@ -316,7 +316,7 @@ static const struct snd_soc_dapm_widget cs35l45_dapm_widgets[] = {SND_SOC_DAPM_AIF_OUT ("ASP_TX2" ,NULL ,1 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX2_EN_SHIFT ,0 ),SND_SOC_DAPM_AIF_OUT ("ASP_TX3" ,NULL ,2 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX3_EN_SHIFT ,0 ),SND_SOC_DAPM_AIF_OUT ("ASP_TX4" ,NULL ,3 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX4_EN_SHIFT ,0 ), -SND_SOC_DAPM_AIF_OUT ("ASP_TX5" ,NULL ,3 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX5_EN_SHIFT ,0 ), +SND_SOC_DAPM_AIF_OUT ("ASP_TX5" ,NULL ,4 ,CS35L45_ASP_ENABLES1 ,CS35L45_ASP_TX5_EN_SHIFT ,0 ),SND_SOC_DAPM_MUX ("ASP_TX1 Source" ,SND_SOC_NOPM ,0 ,0 , &cs35l45_asp_muxes[0 ]), SND_SOC_DAPM_MUX("ASP_TX2 Source", SND_SOC_NOPM, 0, 0, &cs35l45_asp_muxes[1]),
sound/soc/codecs/cs42l43-jack.c +31 -6
@@ -496,7 +496,23 @@ void cs42l43_bias_sense_timeout(struct work_struct *work)pm_runtime_put_autosuspend (priv->dev); } -static void cs42l43_start_load_detect (struct cs42l43_codec *priv) +static const struct reg_sequence cs42l43_3pole_patch[] = { + {0x4000 ,0x00000055 }, + {0x4000 ,0x000000AA }, + {0x17420 ,0x8500F300 }, + {0x17424 ,0x36003E00 }, + {0x4000 ,0x00000000 }, +}; + +static const struct reg_sequence cs42l43_4pole_patch[] = { + {0x4000 ,0x00000055 }, + {0x4000 ,0x000000AA }, + {0x17420 ,0x7800E600 }, + {0x17424 ,0x36003800 }, + {0x4000 ,0x00000000 }, +}; + +static void cs42l43_start_load_detect (struct cs42l43_codec *priv,bool mic) {struct cs42l43 *cs42l43 = priv->core;
@@ -520,6 +536,15 @@ static void cs42l43_start_load_detect(struct cs42l43_codec *priv)dev_err (priv->dev,"Load detect HP power down timed out\n" ); } +if (mic) +regmap_multi_reg_write_bypassed (cs42l43->regmap, + cs42l43_4pole_patch, +ARRAY_SIZE (cs42l43_4pole_patch)); +else +regmap_multi_reg_write_bypassed (cs42l43->regmap, + cs42l43_3pole_patch, +ARRAY_SIZE (cs42l43_3pole_patch)); +regmap_update_bits (cs42l43->regmap,CS42L43_BLOCK_EN3 ,CS42L43_ADC1_EN_MASK |CS42L43_ADC2_EN_MASK ,0 );regmap_update_bits (cs42l43->regmap,CS42L43_DACCNFG2 ,CS42L43_HP_HPF_EN_MASK ,0 );
@@ -598,7 +623,7 @@ static int cs42l43_run_load_detect(struct cs42l43_codec *priv, bool mic)reinit_completion (&priv->load_detect); -cs42l43_start_load_detect (priv); +cs42l43_start_load_detect (priv, mic); time_left =wait_for_completion_timeout (&priv->load_detect,msecs_to_jiffies (CS42L43_LOAD_TIMEOUT_MS ));cs42l43_stop_load_detect (priv);
@@ -622,11 +647,11 @@ static int cs42l43_run_load_detect(struct cs42l43_codec *priv, bool mic) }switch (val &CS42L43_AMP3_RES_DET_MASK ) { -case 0x0 :// low impedance -case 0x1 :// high impedance +case 0x0 :// < 22 Ohm impedance +case 0x1 :// < 150 Ohm impedance +case 0x2 :// < 1000 Ohm impedance return CS42L43_JACK_HEADPHONE ; -case 0x2 :// lineout -case 0x3 :// Open circuit +case 0x3 :// > 1000 Ohm impedance return CS42L43_JACK_LINEOUT ;default :return -EINVAL ;
sound/soc/fsl/fsl_xcvr.c +3 -0
@@ -206,10 +206,13 @@ static int fsl_xcvr_mode_put(struct snd_kcontrol *kcontrol, xcvr->mode =snd_soc_enum_item_to_val (e, item[0 ]); +down_read (&card->snd_card->controls_rwsem);fsl_xcvr_activate_ctl (dai, fsl_xcvr_arc_mode_kctl.name, (xcvr->mode ==FSL_XCVR_MODE_ARC ));fsl_xcvr_activate_ctl (dai, fsl_xcvr_earc_capds_kctl.name, (xcvr->mode ==FSL_XCVR_MODE_EARC )); +up_read (&card->snd_card->controls_rwsem); +/* Allow playback for SPDIF only */ rtd =snd_soc_get_pcm_runtime (card, card->dai_link); rtd->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream_count =
sound/soc/intel/boards/sof_es8336.c +9 -0
@@ -332,6 +332,15 @@ static int sof_es8336_quirk_cb(const struct dmi_system_id *id)* if the topology file is modified as well. */ static const struct dmi_system_id sof_es8336_quirk_table[] = { + { + .callback = sof_es8336_quirk_cb, + .matches = { +DMI_MATCH (DMI_SYS_VENDOR ,"HUAWEI" ), +DMI_MATCH (DMI_PRODUCT_NAME ,"BOD-WXX9" ), + }, + .driver_data = (void *)(SOF_ES8336_HEADPHONE_GPIO | +SOF_ES8336_ENABLE_DMIC ) + }, { .callback = sof_es8336_quirk_cb, .matches = {