Linux 4.19.219
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.219 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.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/pinctrl/marvell,armada-37xx-pinctrl.txt | 26 Documentation/networking/ipvs-sysctl.txt | 3 Makefile | 2 arch/arm/boot/dts/bcm5301x.dtsi | 4 arch/arm/include/asm/tlb.h | 8 arch/arm/mach-socfpga/core.h | 2 arch/arm/mach-socfpga/platsmp.c | 8 arch/arm64/boot/dts/marvell/armada-3720-db.dts | 3 arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts | 3 arch/arm64/boot/dts/marvell/armada-37xx.dtsi | 9 arch/ia64/include/asm/tlb.h | 10 arch/mips/Kconfig | 2 arch/s390/include/asm/tlb.h | 16 arch/s390/mm/pgtable.c | 13 arch/sh/include/asm/tlb.h | 10 arch/um/include/asm/tlb.h | 12 arch/xtensa/include/asm/vectors.h | 2 arch/xtensa/kernel/setup.c | 12 arch/xtensa/mm/mmu.c | 2 drivers/android/binder.c | 2 drivers/block/xen-blkfront.c | 126 +- drivers/firmware/arm_scmi/scmi_pm_domain.c | 4 drivers/gpu/drm/vc4/vc4_bo.c | 2 drivers/hid/wacom_wac.c | 8 drivers/hid/wacom_wac.h | 1 drivers/media/cec/cec-adap.c | 1 drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c | 4 drivers/net/xen-netfront.c | 257 +++-- drivers/pci/controller/pci-aardvark.c | 436 ++++++++-- drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 28 drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 3 drivers/tty/hvc/hvc_xen.c | 17 drivers/usb/core/hub.c | 23 drivers/usb/dwc2/hcd_queue.c | 2 drivers/usb/serial/option.c | 5 drivers/vhost/vsock.c | 2 drivers/xen/xenbus/xenbus_probe.c | 27 fs/fuse/dev.c | 14 fs/nfs/nfs42xdr.c | 3 fs/proc/vmcore.c | 15 include/asm-generic/tlb.h | 2 include/net/nfc/nci_core.h | 1 include/net/nl802154.h | 7 include/xen/interface/io/ring.h | 293 +++--- kernel/power/hibernate.c | 6 kernel/trace/trace.h | 24 kernel/trace/trace_events.c | 7 mm/hugetlb.c | 23 mm/memory.c | 10 net/ipv4/tcp_cubic.c | 5 net/ipv6/ip6_output.c | 2 net/netfilter/ipvs/ip_vs_core.c | 8 net/nfc/nci/core.c | 19 net/smc/af_smc.c | 8 net/smc/smc_close.c | 6 sound/pci/ctxfi/ctamixer.c | 14 sound/pci/ctxfi/ctdaio.c | 16 sound/pci/ctxfi/ctresource.c | 7 sound/pci/ctxfi/ctresource.h | 4 sound/pci/ctxfi/ctsrc.c | 7 sound/soc/qcom/qdsp6/q6routing.c | 6 sound/soc/soc-topology.c | 3 63 files changed, 1156 insertions(+), 451 deletions(-)
Alexander Aring (1):
net: ieee802154: handle iftypes as u32
Dan Carpenter (2):
staging: rtl8192e: Fix use after free in _rtl92e_pci_disconnect() drm/vc4: fix error code in vc4_create_object()
Daniele Palmas (1):
USB: serial: option: add Telit LE910S1 0x9200 composition
David Hildenbrand (2):
proc/vmcore: fix clearing user buffer by properly using clear_user() s390/mm: validate VMA in PGSTE manipulation functions
Eric Dumazet (2):
ipv6: fix typos in __ip6_finish_output()
tcp_cubic: fix spurious Hystart ACK train detections for not-cwnd-limited flows
Florian Fainelli (2):
ARM: dts: BCM5301X: Fix I2C controller interrupt
ARM: dts: BCM5301X: Add interrupt properties to GPIO node
Greg Kroah-Hartman (1):
Linux 4.19.219
Gregory CLEMENT (1):
pinctrl: armada-37xx: add missing pin: PCIe1 Wakeup
Guangbin Huang (1):
net: hns3: fix VF RSS failed problem after PF enable multi-TCs
Hans Verkuil (1):
media: cec: copy sequence field for the reply
Huang Pei (1):
MIPS: use 3-level pgtable for 64KB page size on MIPS_VA_BITS_48
Jason Gerecke (1):
HID: wacom: Use "Confidence" flag to prevent reporting invalid contacts
Juergen Gross (9):
xen: sync include/xen/interface/io/ring.h with Xen's newest version xen/blkfront: read response from backend only once xen/blkfront: don't take local copy of a request from the ring page xen/blkfront: don't trust the backend response data blindly xen/netfront: read response from backend only once xen/netfront: don't read data from request on the ring page xen/netfront: disentangle tx_skb_freelist
xen/netfront: don't trust the backend response data blindly
tty: hvc: replace BUG_ON() with negative return value
Lin Ma (1):
NFC: add NCI_UNREG flag to eliminate the race
Marek Behún (4):
PCI: aardvark: Improve link training
pinctrl: armada-37xx: Correct mpp definitions
pinctrl: armada-37xx: Correct PWM pins definitions
arm64: dts: marvell: armada-37xx: Set pcie_reset_pin to gpio function
Mathias Nyman (2):
usb: hub: Fix usb enumeration issue due to address0 race
usb: hub: Fix locking issues with address0_mutex
Miklos Szeredi (2):
fuse: fix page stealing
fuse: release pipe buf after last use
Mingjie Zhang (1):
USB: serial: option: add Fibocom FM101-GL variants
Miquel Raynal (1):
arm64: dts: marvell: armada-37xx: declare PCIe reset pin
Nadav Amit (1):
hugetlbfs: flush TLBs correctly after huge_pmd_unshare
Nathan Chancellor (1):
usb: dwc2: hcd_queue: Fix use of floating point literal
Pali Rohár (12):
PCI: aardvark: Train link immediately after enabling training
PCI: aardvark: Issue PERST via GPIO
PCI: aardvark: Replace custom macros by standard linux/pci_regs.h macros
PCI: aardvark: Indicate error in 'val' when config read fails
PCI: aardvark: Don't touch PCIe registers if no card connected
PCI: aardvark: Fix compilation on s390
PCI: aardvark: Move PCIe reset card code to advk_pcie_train_link()
PCI: aardvark: Update comment about disabling link training
PCI: aardvark: Configure PCIe resources from 'ranges' DT property
PCI: aardvark: Fix PCIe Max Payload Size setting
PCI: aardvark: Fix link training
PCI: aardvark: Fix checking for link up via LTSSM state
Peng Fan (1):
firmware: arm_scmi: pm: Propagate return value to caller
Randy Dunlap (1):
xtensa: use CONFIG_USE_OF instead of CONFIG_OF
Remi Pommarel (1):
PCI: aardvark: Wait for endpoint to be ready before training link
Sreekanth Reddy (1):
scsi: mpt3sas: Fix kernel panic during drive powercycle test
Srinivas Kandagatla (1):
ASoC: qdsp6: q6routing: Conditionally reset FrontEnd Mixer
Stefano Garzarella (1):
vhost/vsock: fix incorrect used length reported to the guest
Stefano Stabellini (2):
xen: don't continue xenstore initialization in case of errors
xen: detect uninitialized xenbus in xenbus_init
Steven Rostedt (VMware) (2):
tracing: Fix pid filtering when triggers are attached
tracing: Check pid filtering when creating events
Takashi Iwai (3):
ALSA: ctxfi: Fix out-of-range access
ASoC: topology: Add missing rwsem around snd_ctl_remove() calls
ARM: socfpga: Fix crash with CONFIG_FORTIRY_SOURCE
Thomas Zeitlhofer (1):
PM: hibernate: use correct mode for swsusp_close()
Todd Kjos (1):
binder: fix test regression due to sender_euid change
Tony Lu (2):
net/smc: Ensure the active closing peer first closes clcsock net/smc: Don't call clcsock shutdown twice when smc shutdown
Trond Myklebust (1):
NFSv42: Don't fail clone() unless the OP_CLONE operation failed
Wen Yang (1):
PCI: aardvark: Fix a leaked reference by adding missing of_node_put()
yangxingwu (1):
netfilter: ipvs: Fix reuse connection if RS weight is 0
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/pinctrl/marvell,armada-37xx-pinctrl.txt +17 -9
@@ -43,26 +43,26 @@ group emmc_nb group pwm0 - pin 11 (GPIO1-11) - - functions pwm, gpio + - functions pwm, led, gpio group pwm1 - pin 12 - - functions pwm, gpio + - functions pwm, led, gpio group pwm2 - pin 13 - - functions pwm, gpio + - functions pwm, led, gpio group pwm3 - pin 14 - - functions pwm, gpio + - functions pwm, led, gpio group pmic1 - - pin 17 + - pin 7 - functions pmic, gpio group pmic0 - - pin 16 + - pin 6 - functions pmic, gpio group i2c2
@@ -112,17 +112,25 @@ group usb2_drvvbus1 - functions drvbus, gpio group sdio_sb - - pins 60-64 + - pins 60-65 - functions sdio, gpio group rgmii - - pins 42-55 + - pins 42-53 - functions mii, gpio group pcie1 - - pins 39-40 + - pins 39 + - functions pcie, gpio + +group pcie1_clkreq + - pins 40 - functions pcie, gpio +group smi + - pins 54-55 + - functions smi, gpio + group ptp - pins 56-58 - functions ptp, gpio
Documentation/networking/ipvs-sysctl.txt +1 -2
@@ -30,8 +30,7 @@ conn_reuse_mode - INTEGER 0: disable any special handling on port reuse. The new connection will be delivered to the same real server that was - servicing the previous connection. This will effectively - disable expire_nodest_conn. + servicing the previous connection. bit 1: enable rescheduling of new connections when it is safe. That is, whenever expire_nodest_conn and for TCP sockets, when
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 218 +SUBLEVEL = 219 EXTRAVERSION = NAME = "People's Front"
arch/arm/boot/dts/bcm5301x.dtsi +3 -1
@@ -239,6 +239,8 @@ gpio-controller; #gpio-cells = <2>; + interrupt-controller; + #interrupt-cells = <2>; }; pcie0: pcie@12000 {
@@ -384,7 +386,7 @@ i2c0: i2c@18009000 { compatible = "brcm,iproc-i2c"; reg = <0x18009000 0x50>; - interrupts = <GIC_SPI 121 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>; #address-cells = <1>; #size-cells = <0>; clock-frequency = <100000>;
arch/arm/include/asm/tlb.h +8 -0
@@ -280,6 +280,14 @@ tlb_remove_pmd_tlb_entry(struct mmu_gather *tlb, pmd_t *pmdp, unsigned long addrtlb_add_flush (tlb, addr); } +static inline void +tlb_flush_pmd_range (struct mmu_gather *tlb,unsigned long address, +unsigned long size) +{ +tlb_add_flush (tlb, address); +tlb_add_flush (tlb, address + size -PMD_SIZE ); +} +#define pte_free_tlb (tlb, ptep, addr) __pte_free_tlb(tlb, ptep, addr)#define pmd_free_tlb (tlb, pmdp, addr) __pmd_free_tlb(tlb, pmdp, addr)#define pud_free_tlb (tlb, pudp, addr) pud_free((tlb)->mm, pudp)
arch/arm/mach-socfpga/core.h +1 -1
@@ -48,7 +48,7 @@ extern void __iomem *sdr_ctl_base_addr;u32 socfpga_sdram_self_refresh (u32 sdr_base);extern unsigned int socfpga_sdram_self_refresh_sz; -extern char secondary_trampoline, secondary_trampoline_end; +extern char secondary_trampoline[], secondary_trampoline_end[];extern unsigned long socfpga_cpu1start_addr;
arch/arm/mach-socfpga/platsmp.c +4 -4
@@ -31,14 +31,14 @@static int socfpga_boot_secondary (unsigned int cpu,struct task_struct *idle) { -int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; +int trampoline_size = secondary_trampoline_end - secondary_trampoline;if (socfpga_cpu1start_addr) {/* This will put CPU #1 into reset. */ writel (RSTMGR_MPUMODRST_CPU1 , rst_manager_base_addr +SOCFPGA_RSTMGR_MODMPURST ); -memcpy (phys_to_virt (0 ), &secondary_trampoline, trampoline_size); +memcpy (phys_to_virt (0 ), secondary_trampoline, trampoline_size);writel (__pa_symbol (secondary_startup), sys_manager_base_addr + (socfpga_cpu1start_addr &0x000000ff ));
@@ -56,12 +56,12 @@ static int socfpga_boot_secondary(unsigned int cpu, struct task_struct *idle)static int socfpga_a10_boot_secondary (unsigned int cpu,struct task_struct *idle) { -int trampoline_size = &secondary_trampoline_end - &secondary_trampoline; +int trampoline_size = secondary_trampoline_end - secondary_trampoline;if (socfpga_cpu1start_addr) {writel (RSTMGR_MPUMODRST_CPU1 , rst_manager_base_addr +SOCFPGA_A10_RSTMGR_MODMPURST ); -memcpy (phys_to_virt (0 ), &secondary_trampoline, trampoline_size); +memcpy (phys_to_virt (0 ), secondary_trampoline, trampoline_size);writel (__pa_symbol (secondary_startup), sys_manager_base_addr + (socfpga_cpu1start_addr &0x00000fff ));
arch/arm64/boot/dts/marvell/armada-3720-db.dts +3 -0
@@ -128,6 +128,9 @@ /* CON15(V2.0)/CON17(V1.4) : PCIe / CON15(V2.0)/CON12(V1.4) :mini-PCIe */ &pcie0 { + pinctrl-names = "default"; + pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>; + reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>; status = "okay"; };
arch/arm64/boot/dts/marvell/armada-3720-espressobin.dts +3 -0
@@ -55,6 +55,9 @@ /* J9 */ &pcie0 { + pinctrl-names = "default"; + pinctrl-0 = <&pcie_reset_pins &pcie_clkreq_pins>; + reset-gpios = <&gpiosb 3 GPIO_ACTIVE_LOW>; status = "okay"; };
arch/arm64/boot/dts/marvell/armada-37xx.dtsi +9 -0
@@ -254,6 +254,15 @@ function = "mii"; }; + pcie_reset_pins: pcie-reset-pins { + groups = "pcie1"; + function = "gpio"; + }; + + pcie_clkreq_pins: pcie-clkreq-pins { + groups = "pcie1_clkreq"; + function = "pcie"; + }; }; eth0: ethernet@30000 {
arch/ia64/include/asm/tlb.h +10 -0
@@ -268,6 +268,16 @@ __tlb_remove_tlb_entry (struct mmu_gather *tlb, pte_t *ptep, unsigned long addre tlb->end_addr = address +PAGE_SIZE ; } +static inline void +tlb_flush_pmd_range (struct mmu_gather *tlb,unsigned long address, +unsigned long size) +{ +if (tlb->start_addr > address) + tlb->start_addr = address; +if (tlb->end_addr < address + size) + tlb->end_addr = address + size; +} +#define tlb_migrate_finish (mm) platform_tlb_migrate_finish(mm)#define tlb_start_vma (tlb, vma) do { } while (0)
arch/mips/Kconfig +1 -1
@@ -2991,7 +2991,7 @@ config HAVE_LATENCYTOP_SUPPORT config PGTABLE_LEVELS int default 4 if PAGE_SIZE_4KB && MIPS_VA_BITS_48 - default 3 if 64BIT && !PAGE_SIZE_64KB + default 3 if 64BIT && (!PAGE_SIZE_64KB || MIPS_VA_BITS_48) default 2 config MIPS_AUTO_PFN_OFFSET
arch/s390/include/asm/tlb.h +16 -0
@@ -116,6 +116,20 @@ static inline void tlb_remove_page_size(struct mmu_gather *tlb,return tlb_remove_page (tlb, page); } +static inline void tlb_flush_pmd_range (struct mmu_gather *tlb, +unsigned long address,unsigned long size) +{ +/* +* the range might exceed the original range that was provided to +* tlb_gather_mmu(), so we need to update it despite the fact it is +* usually not updated. +*/ +if (tlb->start > address) + tlb->start = address; +if (tlb->end < address + size) + tlb->end = address + size; +} +/* * pte_free_tlb frees a pte table and clears the CRSTE for the * page table from the tlb.
@@ -177,6 +191,8 @@ static inline void pud_free_tlb(struct mmu_gather *tlb, pud_t *pud,#define tlb_remove_tlb_entry (tlb, ptep, addr) do { } while (0)#define tlb_remove_pmd_tlb_entry (tlb, pmdp, addr) do { } while (0)#define tlb_migrate_finish (mm) do { } while (0) +#define tlb_flush_pmd_range (tlb, addr, sz) do { } while (0) +#define tlb_remove_huge_tlb_entry (h, tlb, ptep, address) \ tlb_remove_tlb_entry(tlb, ptep, address)
arch/s390/mm/pgtable.c +13 -0
@@ -970,6 +970,7 @@ EXPORT_SYMBOL(get_guest_storage_key);int pgste_perform_essa (struct mm_struct *mm,unsigned long hva,int orc,unsigned long *oldpte,unsigned long *oldpgste) { +struct vm_area_struct *vma;unsigned long pgstev;spinlock_t *ptl;pgste_t pgste;
@@ -979,6 +980,10 @@ int pgste_perform_essa(struct mm_struct *mm, unsigned long hva, int orc,WARN_ON_ONCE (orc >ESSA_MAX );if (unlikely (orc >ESSA_MAX ))return -EINVAL ; + + vma =find_vma (mm, hva); +if (!vma || hva < vma->vm_start ||is_vm_hugetlb_page (vma)) +return -EFAULT ; ptep =get_locked_pte (mm, hva, &ptl);if (unlikely (!ptep))return -EFAULT ;
@@ -1071,10 +1076,14 @@ EXPORT_SYMBOL(pgste_perform_essa);int set_pgste_bits (struct mm_struct *mm,unsigned long hva,unsigned long bits,unsigned long value) { +struct vm_area_struct *vma;spinlock_t *ptl;pgste_t new;pte_t *ptep; + vma =find_vma (mm, hva); +if (!vma || hva < vma->vm_start ||is_vm_hugetlb_page (vma)) +return -EFAULT ; ptep =get_locked_pte (mm, hva, &ptl);if (unlikely (!ptep))return -EFAULT ;
@@ -1099,9 +1108,13 @@ EXPORT_SYMBOL(set_pgste_bits);*/ int get_pgste (struct mm_struct *mm,unsigned long hva,unsigned long *pgstep) { +struct vm_area_struct *vma;spinlock_t *ptl;pte_t *ptep; + vma =find_vma (mm, hva); +if (!vma || hva < vma->vm_start ||is_vm_hugetlb_page (vma)) +return -EFAULT ; ptep =get_locked_pte (mm, hva, &ptl);if (unlikely (!ptep))return -EFAULT ;
arch/sh/include/asm/tlb.h +10 -0
@@ -127,6 +127,16 @@ static inline void tlb_remove_page_size(struct mmu_gather *tlb,return tlb_remove_page (tlb, page); } +static inline void +tlb_flush_pmd_range (struct mmu_gather *tlb,unsigned long address, +unsigned long size) +{ +if (tlb->start > address) + tlb->start = address; +if (tlb->end < address + size) + tlb->end = address + size; +} +#define tlb_remove_check_page_size_change tlb_remove_check_page_size_changestatic inline void tlb_remove_check_page_size_change (struct mmu_gather *tlb,unsigned int page_size)
arch/um/include/asm/tlb.h +12 -0
@@ -130,6 +130,18 @@ static inline void tlb_remove_page_size(struct mmu_gather *tlb,return tlb_remove_page (tlb, page); } +static inline void +tlb_flush_pmd_range (struct mmu_gather *tlb,unsigned long address, +unsigned long size) +{ + tlb->need_flush =1 ; + +if (tlb->start > address) + tlb->start = address; +if (tlb->end < address + size) + tlb->end = address + size; +} +/** * tlb_remove_tlb_entry - remember a pte unmapping for later tlb invalidation. *
arch/xtensa/include/asm/vectors.h +1 -1
@@ -31,7 +31,7 @@#endif #define XCHAL_KIO_SIZE 0x10000000 -#if (!XCHAL_HAVE_PTP_MMU ||XCHAL_HAVE_SPANNING_WAY ) && defined(CONFIG_OF ) +#if (!XCHAL_HAVE_PTP_MMU ||XCHAL_HAVE_SPANNING_WAY ) && defined(CONFIG_USE_OF )#define XCHAL_KIO_PADDR xtensa_get_kio_paddr()#ifndef __ASSEMBLY__extern unsigned long xtensa_kio_paddr;
arch/xtensa/kernel/setup.c +6 -6
@@ -65,7 +65,7 @@ int initrd_is_mapped = 0;extern int initrd_below_start_ok;#endif -#ifdef CONFIG_OF +#ifdef CONFIG_USE_OF void *dtb_start = __dtb_start;#endif
@@ -127,7 +127,7 @@ __tagtable(BP_TAG_INITRD, parse_tag_initrd);#endif /* CONFIG_BLK_DEV_INITRD */ -#ifdef CONFIG_OF +#ifdef CONFIG_USE_OF static int __init parse_tag_fdt (const bp_tag_t *tag) {
@@ -137,7 +137,7 @@ static int __init parse_tag_fdt(const bp_tag_t *tag)__tagtable (BP_TAG_FDT , parse_tag_fdt); -#endif /* CONFIG_OF */ +#endif /* CONFIG_USE_OF */ static int __init parse_tag_cmdline (const bp_tag_t * tag) {
@@ -185,7 +185,7 @@ static int __init parse_bootparam(const bp_tag_t *tag) }#endif -#ifdef CONFIG_OF +#ifdef CONFIG_USE_OF #if !XCHAL_HAVE_PTP_MMU ||XCHAL_HAVE_SPANNING_WAY unsigned long xtensa_kio_paddr =XCHAL_KIO_DEFAULT_PADDR ;
@@ -234,7 +234,7 @@ void __init early_init_devtree(void *params) strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE); } -#endif /* CONFIG_OF */ +#endif /* CONFIG_USE_OF */ /* * Initialize architecture. (Early stage)
@@ -255,7 +255,7 @@ void __init init_arch(bp_tag_t *bp_start)if (bp_start)parse_bootparam (bp_start); -#ifdef CONFIG_OF +#ifdef CONFIG_USE_OF early_init_devtree (dtb_start);#endif
arch/xtensa/mm/mmu.c +1 -1
@@ -98,7 +98,7 @@ void init_mmu(void)void init_kio (void ) { -#if XCHAL_HAVE_PTP_MMU &&XCHAL_HAVE_SPANNING_WAY && defined(CONFIG_OF ) +#if XCHAL_HAVE_PTP_MMU &&XCHAL_HAVE_SPANNING_WAY && defined(CONFIG_USE_OF )/* * Update the IO area mapping in case xtensa_kio_paddr has changed */
drivers/android/binder.c +1 -1
@@ -2966,7 +2966,7 @@ static void binder_transaction(struct binder_proc *proc, t->from = thread; else t->from = NULL; - t->sender_euid = proc->cred->euid; + t->sender_euid =task_euid (proc->tsk); t->to_proc = target_proc; t->to_thread = target_thread; t->code = tr->code;
drivers/block/xen-blkfront.c +84 -42
261 lines not on this page · raw message
drivers/firmware/arm_scmi/scmi_pm_domain.c +1 -3
@@ -106,9 +106,7 @@ static int scmi_pm_domain_probe(struct scmi_device *sdev) scmi_pd_data->domains = domains; scmi_pd_data->num_domains = num_domains; -of_genpd_add_provider_onecell (np, scmi_pd_data); - -return 0 ; +return of_genpd_add_provider_onecell (np, scmi_pd_data); }static const struct scmi_device_id scmi_id_table[] = {
drivers/gpu/drm/vc4/vc4_bo.c +1 -1
@@ -417,7 +417,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size) bo =kzalloc (sizeof (*bo),GFP_KERNEL );if (!bo) -return ERR_PTR (-ENOMEM ); +return NULL ; bo->madv =VC4_MADV_WILLNEED ;refcount_set (&bo->usecnt,0 );
drivers/hid/wacom_wac.c +7 -1
@@ -2538,6 +2538,9 @@ static void wacom_wac_finger_event(struct hid_device *hdev,struct wacom_features *features = &wacom->wacom_wac.features;switch (equivalent_usage) { +case HID_DG_CONFIDENCE : + wacom_wac->hid_data.confidence = value; +break ;case HID_GD_X : wacom_wac->hid_data.x = value;break ;
@@ -2568,7 +2571,8 @@ static void wacom_wac_finger_event(struct hid_device *hdev,if (usage->usage_index +1 == field->report_count) { -if (equivalent_usage == wacom_wac->hid_data.last_slot_field) +if (equivalent_usage == wacom_wac->hid_data.last_slot_field && + wacom_wac->hid_data.confidence)wacom_wac_finger_slot (wacom_wac, wacom_wac->touch_input); } }
@@ -2581,6 +2585,8 @@ static void wacom_wac_finger_pre_report(struct hid_device *hdev,struct hid_data * hid_data = &wacom_wac->hid_data;int i; + hid_data->confidence = true; +for (i =0 ; i < report->maxfield; i++) {struct hid_field *field = report->field[i];int j;
drivers/hid/wacom_wac.h +1 -0
@@ -302,6 +302,7 @@ struct hid_data {bool tipswitch;bool barrelswitch;bool barrelswitch2; +bool confidence;int x;int y;int pressure;
drivers/media/cec/cec-adap.c +1 -0
@@ -1146,6 +1146,7 @@ void cec_received_msg_ts(struct cec_adapter *adap,if (abort) dst->rx_status |=CEC_RX_STATUS_FEATURE_ABORT ; msg->flags = dst->flags; + msg->sequence = dst->sequence;/* Remove it from the wait_queue */ list_del_init (&data->list);
drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c +2 -2
@@ -451,9 +451,9 @@ static int hclgevf_set_rss_tc_mode(struct hclgevf_dev *hdev, u16 rss_size) roundup_size =ilog2 (roundup_size);for (i =0 ; i <HCLGEVF_MAX_TC_NUM ; i++) { - tc_valid[i] = !!(hdev->hw_tc_map &BIT (i)); + tc_valid[i] =1 ; tc_size[i] = roundup_size; - tc_offset[i] = rss_size * i; + tc_offset[i] = (hdev->hw_tc_map &BIT (i)) ? rss_size * i :0 ; }hclgevf_cmd_setup_basic_desc (&desc,HCLGEVF_OPC_RSS_TC_MODE , false);
drivers/net/xen-netfront.c +155 -102
545 lines not on this page · raw message
drivers/pci/controller/pci-aardvark.c +387 -49
586 lines not on this page · raw message
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +15 -13
@@ -166,12 +166,16 @@ static struct armada_37xx_pin_group armada_37xx_nb_groups[] = {PIN_GRP_GPIO ("jtag" ,20 ,5 ,BIT (0 ),"jtag" ),PIN_GRP_GPIO ("sdio0" ,8 ,3 ,BIT (1 ),"sdio" ),PIN_GRP_GPIO ("emmc_nb" ,27 ,9 ,BIT (2 ),"emmc" ), -PIN_GRP_GPIO ("pwm0" ,11 ,1 ,BIT (3 ),"pwm" ), -PIN_GRP_GPIO ("pwm1" ,12 ,1 ,BIT (4 ),"pwm" ), -PIN_GRP_GPIO ("pwm2" ,13 ,1 ,BIT (5 ),"pwm" ), -PIN_GRP_GPIO ("pwm3" ,14 ,1 ,BIT (6 ),"pwm" ), -PIN_GRP_GPIO ("pmic1" ,17 ,1 ,BIT (7 ),"pmic" ), -PIN_GRP_GPIO ("pmic0" ,16 ,1 ,BIT (8 ),"pmic" ), +PIN_GRP_GPIO_3 ("pwm0" ,11 ,1 ,BIT (3 ) |BIT (20 ),0 ,BIT (20 ),BIT (3 ), +"pwm" ,"led" ), +PIN_GRP_GPIO_3 ("pwm1" ,12 ,1 ,BIT (4 ) |BIT (21 ),0 ,BIT (21 ),BIT (4 ), +"pwm" ,"led" ), +PIN_GRP_GPIO_3 ("pwm2" ,13 ,1 ,BIT (5 ) |BIT (22 ),0 ,BIT (22 ),BIT (5 ), +"pwm" ,"led" ), +PIN_GRP_GPIO_3 ("pwm3" ,14 ,1 ,BIT (6 ) |BIT (23 ),0 ,BIT (23 ),BIT (6 ), +"pwm" ,"led" ), +PIN_GRP_GPIO ("pmic1" ,7 ,1 ,BIT (7 ),"pmic" ), +PIN_GRP_GPIO ("pmic0" ,6 ,1 ,BIT (8 ),"pmic" ),PIN_GRP_GPIO ("i2c2" ,2 ,2 ,BIT (9 ),"i2c" ),PIN_GRP_GPIO ("i2c1" ,0 ,2 ,BIT (10 ),"i2c" ), PIN_GRP_GPIO("spi_cs1", 17, 1, BIT(12), "spi"),
@@ -183,11 +187,6 @@ static struct armada_37xx_pin_group armada_37xx_nb_groups[] = {PIN_GRP_EXTRA ("uart2" ,9 ,2 ,BIT (1 ) |BIT (13 ) |BIT (14 ) |BIT (19 ),BIT (1 ) |BIT (13 ) |BIT (14 ),BIT (1 ) |BIT (19 ), 18, 2, "gpio", "uart"), -PIN_GRP_GPIO_2 ("led0_od" ,11 ,1 ,BIT (20 ),BIT (20 ),0 ,"led" ), -PIN_GRP_GPIO_2 ("led1_od" ,12 ,1 ,BIT (21 ),BIT (21 ),0 ,"led" ), -PIN_GRP_GPIO_2 ("led2_od" ,13 ,1 ,BIT (22 ),BIT (22 ),0 ,"led" ), - PIN_GRP_GPIO_2("led3_od", 14, 1, BIT(23), BIT(23), 0, "led"), - };static struct armada_37xx_pin_group armada_37xx_sb_groups[] = {
@@ -195,8 +194,11 @@ static struct armada_37xx_pin_group armada_37xx_sb_groups[] = {PIN_GRP_GPIO ("usb2_drvvbus1" ,1 ,1 ,BIT (1 ),"drvbus" ),PIN_GRP_GPIO ("sdio_sb" ,24 ,6 ,BIT (2 ),"sdio" ),PIN_GRP_GPIO ("rgmii" ,6 ,12 ,BIT (3 ),"mii" ), -PIN_GRP_GPIO ("pcie1" ,3 ,2 ,BIT (4 ),"pcie" ), -PIN_GRP_GPIO ("ptp" ,20 ,3 ,BIT (5 ),"ptp" ), +PIN_GRP_GPIO ("smi" ,18 ,2 ,BIT (4 ),"smi" ), +PIN_GRP_GPIO ("pcie1" ,3 ,1 ,BIT (5 ),"pcie" ), +PIN_GRP_GPIO ("pcie1_clkreq" ,4 ,1 ,BIT (9 ),"pcie" ), +PIN_GRP_GPIO ("pcie1_wakeup" ,5 ,1 ,BIT (10 ),"pcie" ), +PIN_GRP_GPIO ("ptp" ,20 ,3 ,BIT (11 ) |BIT (12 ) |BIT (13 ),"ptp" ),PIN_GRP ("ptp_clk" ,21 ,1 ,BIT (6 ),"ptp" ,"mii" ),PIN_GRP ("ptp_trig" ,22 ,1 ,BIT (7 ),"ptp" ,"mii" ), PIN_GRP_GPIO_3("mii_col", 23, 1, BIT(8) | BIT(14), 0, BIT(8), BIT(14),
drivers/scsi/mpt3sas/mpt3sas_scsih.c +1 -1
@@ -3364,7 +3364,7 @@ _scsih_ublock_io_device(struct MPT3SAS_ADAPTER *ioc, u64 sas_address)shost_for_each_device (sdev, ioc->shost) { sas_device_priv_data = sdev->hostdata; -if (!sas_device_priv_data) +if (!sas_device_priv_data || !sas_device_priv_data->sas_target)continue ;if (sas_device_priv_data->sas_target->sas_address != sas_address)
drivers/staging/rtl8192e/rtl8192e/rtl_core.c +2 -1
@@ -2579,13 +2579,14 @@ static void _rtl92e_pci_disconnect(struct pci_dev *pdev)free_irq (dev->irq, dev); priv->irq =0 ; } -free_rtllib (dev);if (dev->mem_start !=0 ) {iounmap ((void __iomem *)dev->mem_start);release_mem_region (pci_resource_start (pdev,1 ),pci_resource_len (pdev,1 )); } + +free_rtllib (dev); }else { priv =rtllib_priv (dev); }
drivers/tty/hvc/hvc_xen.c +14 -3
@@ -86,7 +86,11 @@ static int __write_console(struct xencons_info *xencons, cons = intf->out_cons; prod = intf->out_prod;mb ();/* update queue values before going on */ -BUG_ON ((prod - cons) >sizeof (intf->out)); + +if ((prod - cons) >sizeof (intf->out)) { +pr_err_once ("xencons: Illegal ring page indices" ); +return -EINVAL ; + }while ((sent < len) && ((prod - cons) <sizeof (intf->out))) intf->out[MASK_XENCONS_IDX (prod++, intf->out)] = data[sent++];
@@ -114,7 +118,10 @@ static int domU_write_console(uint32_t vtermno, const char *data, int len)*/ while (len) {int sent =__write_console (cons, data, len); - + +if (sent <0 ) +return sent; + data += sent; len -= sent;
@@ -138,7 +145,11 @@ static int domU_read_console(uint32_t vtermno, char *buf, int len) cons = intf->in_cons; prod = intf->in_prod;mb ();/* get pointers before reading ring */ -BUG_ON ((prod - cons) >sizeof (intf->in)); + +if ((prod - cons) >sizeof (intf->in)) { +pr_err_once ("xencons: Illegal ring page indices" ); +return -EINVAL ; + }while (cons != prod && recv < len) buf[recv++] = intf->in[MASK_XENCONS_IDX (cons++, intf->in)];
drivers/usb/core/hub.c +18 -5
@@ -4575,8 +4575,6 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,if (oldspeed ==USB_SPEED_LOW ) delay =HUB_LONG_RESET_TIME ; -mutex_lock (hcd->address0_mutex); -/* Reset the device; full speed may morph to high speed */ /* FIXME a USB 2.0 device may morph into SuperSpeed on reset. */ retval =hub_port_reset (hub, port1, udev, delay, false);
@@ -4891,7 +4889,6 @@ hub_port_init(struct usb_hub *hub, struct usb_device *udev, int port1,hub_port_disable (hub, port1,0 );update_devnum (udev, devnum);/* for disconnect processing */ } -mutex_unlock (hcd->address0_mutex);return retval; }
@@ -4981,6 +4978,7 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,struct usb_port *port_dev = hub->ports[port1 -1 ];struct usb_device *udev = port_dev->child;static int unreliable_port =-1 ; +bool retry_locked;/* Disconnect any existing devices under this port */ if (udev) {
@@ -5036,7 +5034,11 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, unit_load =100 ; status =0 ; +for (i =0 ; i <SET_CONFIG_TRIES ; i++) { +usb_lock_port (port_dev); +mutex_lock (hcd->address0_mutex); + retry_locked = true;/* reallocate for each attempt, since references * to the previous one can escape in various ways
@@ -5045,6 +5047,8 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,if (!udev) {dev_err (&port_dev->dev,"couldn't allocate usb_device\n" ); +mutex_unlock (hcd->address0_mutex); +usb_unlock_port (port_dev); goto done; }
@@ -5066,12 +5070,14 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus, }/* reset (non-USB 3.0 devices) and get descriptor */ -usb_lock_port (port_dev); status =hub_port_init (hub, udev, port1, i); -usb_unlock_port (port_dev);if (status <0 ) goto loop; +mutex_unlock (hcd->address0_mutex); +usb_unlock_port (port_dev); + retry_locked = false; +if (udev->quirks &USB_QUIRK_DELAY_INIT )msleep (2000 );
@@ -5164,6 +5170,10 @@ static void hub_port_connect(struct usb_hub *hub, int port1, u16 portstatus,usb_ep0_reinit (udev);release_devnum (udev);hub_free_dev (udev); +if (retry_locked) { +mutex_unlock (hcd->address0_mutex); +usb_unlock_port (port_dev); + }usb_put_dev (udev);if ((status == -ENOTCONN ) || (status == -ENOTSUPP ))break ;
@@ -5722,6 +5732,8 @@ static int usb_reset_and_verify_device(struct usb_device *udev) bos = udev->bos; udev->bos =NULL ; +mutex_lock (hcd->address0_mutex); +for (i =0 ; i <SET_CONFIG_TRIES ; ++i) {/* ep0 maxpacket size may change; let the HCD know about it.
@@ -5731,6 +5743,7 @@ static int usb_reset_and_verify_device(struct usb_device *udev)if (ret >=0 || ret == -ENOTCONN || ret == -ENODEV )break ; } +mutex_unlock (hcd->address0_mutex);if (ret <0 ) goto re_enumerate;
drivers/usb/dwc2/hcd_queue.c +1 -1
@@ -59,7 +59,7 @@#define DWC2_UNRESERVE_DELAY (msecs_to_jiffies(5))/* If we get a NAK, wait this long before retrying */ -#define DWC2_RETRY_WAIT_DELAY 1*1E6L +#define DWC2_RETRY_WAIT_DELAY (1 * NSEC_PER_MSEC)/** * dwc2_periodic_channel_available() - Checks that a channel is available for a
drivers/usb/serial/option.c +5 -0
@@ -1267,6 +1267,8 @@ static const struct usb_device_id option_ids[] = { .driver_info = NCTRL(2) }, { USB_DEVICE(TELIT_VENDOR_ID, 0x9010), /* Telit SBL FN980 flashing device */ .driver_info = NCTRL(0) | ZLP }, + { USB_DEVICE(TELIT_VENDOR_ID, 0x9200), /* Telit LE910S1 flashing device */ + .driver_info = NCTRL(0) | ZLP }, { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff), .driver_info = RSVD(1) },
@@ -2094,6 +2096,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0xff, 0x30) }, /* Fibocom FG150 Diag */ { USB_DEVICE_AND_INTERFACE_INFO(0x2cb7, 0x010b, 0xff, 0, 0) }, /* Fibocom FG150 AT */ { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a0, 0xff) }, /* Fibocom NL668-AM/NL652-EU (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a2, 0xff) }, /* Fibocom FM101-GL (laptop MBIM) */ + { USB_DEVICE_INTERFACE_CLASS(0x2cb7, 0x01a4, 0xff), /* Fibocom FM101-GL (laptop MBIM) */ + .driver_info = RSVD(4) }, { USB_DEVICE_INTERFACE_CLASS(0x2df3, 0x9d03, 0xff) }, /* LongSung M5710 */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1404, 0xff) }, /* GosunCn GM500 RNDIS */ { USB_DEVICE_INTERFACE_CLASS(0x305a, 0x1405, 0xff) }, /* GosunCn GM500 MBIM */
drivers/vhost/vsock.c +1 -1
@@ -490,7 +490,7 @@ static void vhost_vsock_handle_tx_kick(struct vhost_work *work)virtio_transport_free_pkt (pkt); len +=sizeof (pkt->hdr); -vhost_add_used (vq, head, len); +vhost_add_used (vq, head,0 ); total_len += len; added = true; }while (likely (!vhost_exceeds_weight (vq, ++pkts, total_len)));
drivers/xen/xenbus/xenbus_probe.c +26 -1
@@ -846,7 +846,7 @@ static struct notifier_block xenbus_resume_nb = {static int __init xenbus_init (void ) { -int err =0 ; +int err;uint64_t v =0 ; xen_store_domain_type =XS_UNKNOWN ;
@@ -886,6 +886,29 @@ static int __init xenbus_init(void) err =hvm_get_parameter (HVM_PARAM_STORE_PFN , &v);if (err) goto out_error; +/* +* Uninitialized hvm_params are zero and return no error. +* Although it is theoretically possible to have +* HVM_PARAM_STORE_PFN set to zero on purpose, in reality it is +* not zero when valid. If zero, it means that Xenstore hasn't +* been properly initialized. Instead of attempting to map a +* wrong guest physical address return error. +* +* Also recognize all bits set as an invalid value. +*/ +if (!v || !~v) { + err = -ENOENT ; + goto out_error; + } +/* Avoid truncation on 32-bit. */ +#if BITS_PER_LONG ==32 +if (v >ULONG_MAX ) { +pr_err ("%s: cannot handle HVM_PARAM_STORE_PFN=%llx > ULONG_MAX\n" , + __func__, v); + err = -EINVAL ; + goto out_error; + } +#endif xen_store_gfn = (unsigned long )v; xen_store_interface = xen_remap(xen_store_gfn << XEN_PAGE_SHIFT,
@@ -920,8 +943,10 @@ static int __init xenbus_init(void)*/ proc_create_mount_point ("xen" );#endif +return 0 ; out_error: + xen_store_domain_type =XS_UNKNOWN ;return err; }
fs/fuse/dev.c +12 -2
@@ -910,6 +910,12 @@ static int fuse_try_move_page(struct fuse_copy_state *cs, struct page **pagep)if (!(buf->flags &PIPE_BUF_FLAG_LRU ))lru_cache_add_file (newpage); +/* +* Release while we have extra ref on stolen page. Otherwise +* anon_pipe_buf_release() might think the page can be reused. +*/ +pipe_buf_release (cs->pipe, buf); + err =0 ;spin_lock (&cs->req->waitq.lock);if (test_bit (FR_ABORTED , &cs->req->flags))
@@ -2054,8 +2060,12 @@ static ssize_t fuse_dev_splice_write(struct pipe_inode_info *pipe,pipe_lock (pipe); out_free: -for (idx =0 ; idx < nbuf; idx++) -pipe_buf_release (pipe, &bufs[idx]); +for (idx =0 ; idx < nbuf; idx++) { +struct pipe_buffer *buf = &bufs[idx]; + +if (buf->ops) +pipe_buf_release (pipe, buf); + }pipe_unlock (pipe);kvfree (bufs);
fs/nfs/nfs42xdr.c +1 -2
@@ -707,8 +707,7 @@ static int nfs4_xdr_dec_clone(struct rpc_rqst *rqstp, status =decode_clone (xdr);if (status) goto out; - status =decode_getfattr (xdr, res->dst_fattr, res->server); - +decode_getfattr (xdr, res->dst_fattr, res->server); out: res->rpc_status = status;return status;
fs/proc/vmcore.c +10 -5
@@ -117,14 +117,19 @@ static ssize_t read_from_oldmem(char *buf, size_t count, nr_bytes = count;/* If pfn is not ram, return zeros for sparse dump files */ -if (pfn_is_ram (pfn) ==0 ) -memset (buf,0 , nr_bytes); -else { +if (pfn_is_ram (pfn) ==0 ) { + tmp =0 ; +if (!userbuf) +memset (buf,0 , nr_bytes); +else if (clear_user (buf, nr_bytes)) + tmp = -EFAULT ; + }else { tmp =copy_oldmem_page (pfn, buf, nr_bytes, offset, userbuf); -if (tmp <0 ) -return tmp; } +if (tmp <0 ) +return tmp; + *ppos += nr_bytes; count -= nr_bytes; buf += nr_bytes;
include/asm-generic/tlb.h +2 -0
@@ -118,6 +118,8 @@ void arch_tlb_gather_mmu(struct mmu_gather *tlb,void tlb_flush_mmu (struct mmu_gather *tlb);void arch_tlb_finish_mmu (struct mmu_gather *tlb,unsigned long start,unsigned long end,bool force); +void tlb_flush_pmd_range (struct mmu_gather *tlb,unsigned long address, +unsigned long size);extern bool __tlb_remove_page_size (struct mmu_gather *tlb,struct page *page,int page_size);
include/net/nfc/nci_core.h +1 -0
@@ -42,6 +42,7 @@ enum nci_flag {NCI_UP ,NCI_DATA_EXCHANGE ,NCI_DATA_EXCHANGE_TO , + NCI_UNREG, };/* NCI device states */
include/net/nl802154.h +4 -3
@@ -19,6 +19,8 @@* */ +#include <linux/types.h> +#define NL802154_GENL_NAME "nl802154"enum nl802154_commands {
@@ -150,10 +152,9 @@ enum nl802154_attrs { };enum nl802154_iftype { -/* for backwards compatibility TODO */ -NL802154_IFTYPE_UNSPEC =-1 , +NL802154_IFTYPE_UNSPEC = (~(__u32 )0 ), -NL802154_IFTYPE_NODE , +NL802154_IFTYPE_NODE =0 ,NL802154_IFTYPE_MONITOR ,NL802154_IFTYPE_COORD ,
include/xen/interface/io/ring.h +158 -135
406 lines not on this page · raw message
kernel/power/hibernate.c +3 -3
@@ -677,7 +677,7 @@ static int load_image_and_restore(void) goto Unlock; error =swsusp_read (&flags); -swsusp_close (FMODE_READ ); +swsusp_close (FMODE_READ |FMODE_EXCL );if (!error)hibernation_restore (flags &SF_PLATFORM_MODE );
@@ -874,7 +874,7 @@ static int software_resume(void)/* The snapshot device should not be opened while we're running */ if (!atomic_add_unless (&snapshot_device_available,-1 ,0 )) { error = -EBUSY ; -swsusp_close (FMODE_READ ); +swsusp_close (FMODE_READ |FMODE_EXCL ); goto Unlock; }
@@ -910,7 +910,7 @@ static int software_resume(void)pm_pr_dbg ("Hibernation image not present or could not be loaded.\n" );return error; Close_Finish: -swsusp_close (FMODE_READ ); +swsusp_close (FMODE_READ |FMODE_EXCL ); goto Finish; }
kernel/trace/trace.h +18 -6
@@ -1365,14 +1365,26 @@ __event_trigger_test_discard(struct trace_event_file *file,if (eflags &EVENT_FILE_FL_TRIGGER_COND ) *tt =event_triggers_call (file, entry, event); -if (test_bit (EVENT_FILE_FL_SOFT_DISABLED_BIT , &file->flags) || - (unlikely (file->flags &EVENT_FILE_FL_FILTERED ) && - !filter_match_preds (file->filter, entry))) { -__trace_event_discard_commit (buffer, event); -return true; - } +if (likely (!(file->flags & (EVENT_FILE_FL_SOFT_DISABLED | +EVENT_FILE_FL_FILTERED | +EVENT_FILE_FL_PID_FILTER )))) +return false; + +if (file->flags &EVENT_FILE_FL_SOFT_DISABLED ) + goto discard; + +if (file->flags &EVENT_FILE_FL_FILTERED && + !filter_match_preds (file->filter, entry)) + goto discard; + +if ((file->flags &EVENT_FILE_FL_PID_FILTER ) && +trace_event_ignore_this_pid (file)) + goto discard;return false; + discard: +__trace_event_discard_commit (buffer, event); +return true; }/**
kernel/trace/trace_events.c +7 -0
@@ -2255,12 +2255,19 @@ static struct trace_event_file * trace_create_new_event(struct trace_event_call *call, struct trace_array *tr) { + struct trace_pid_list *pid_list;struct trace_event_file *file; file =kmem_cache_alloc (file_cachep,GFP_TRACE );if (!file)return NULL ; + pid_list =rcu_dereference_protected (tr->filtered_pids, +lockdep_is_held (&event_mutex)); + +if (pid_list) + file->flags |=EVENT_FILE_FL_PID_FILTER ; + file->event_call = call; file->tr = tr;atomic_set (&file->sm_ref,0 );
mm/hugetlb.c +19 -4
@@ -3425,6 +3425,7 @@ void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma,unsigned long sz =huge_page_size (h);unsigned long mmun_start = start;/* For mmu_notifiers */ unsigned long mmun_end = end;/* For mmu_notifiers */ +bool force_flush = false;WARN_ON (!is_vm_hugetlb_page (vma));BUG_ON (start & ~huge_page_mask (h));
@@ -3451,10 +3452,8 @@ void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma, ptl =huge_pte_lock (h, mm, ptep);if (huge_pmd_unshare (mm, &address, ptep)) {spin_unlock (ptl); -/* -* We just unmapped a page of PMDs by clearing a PUD. -* The caller's TLB flush range should cover this area. -*/ +tlb_flush_pmd_range (tlb, address &PUD_MASK ,PUD_SIZE ); + force_flush = true;continue ; }
@@ -3511,6 +3510,22 @@ void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct *vma, }mmu_notifier_invalidate_range_end (mm, mmun_start, mmun_end);tlb_end_vma (tlb, vma); + +/* +* If we unshared PMDs, the TLB flush was not recorded in mmu_gather. We +* could defer the flush until now, since by holding i_mmap_rwsem we +* guaranteed that the last refernece would not be dropped. But we must +* do the flushing before we return, as otherwise i_mmap_rwsem will be +* dropped and the last reference to the shared PMDs page might be +* dropped as well. +* +* In theory we could defer the freeing of the PMD pages as well, but +* huge_pmd_unshare() relies on the exact page_count for the PMD page to +* detect sharing, so we cannot defer the release of the page either. +* Instead, do flush now. +*/ +if (force_flush) +tlb_flush_mmu_tlbonly (tlb); } void __unmap_hugepage_range_final(struct mmu_gather *tlb,
mm/memory.c +10 -0
@@ -324,6 +324,16 @@ bool __tlb_remove_page_size(struct mmu_gather *tlb, struct page *page, int page_ return false; } +void tlb_flush_pmd_range (struct mmu_gather *tlb,unsigned long address, +unsigned long size) +{ +if (tlb->page_size !=0 && tlb->page_size !=PMD_SIZE ) +tlb_flush_mmu (tlb); + + tlb->page_size =PMD_SIZE ; + tlb->start =min (tlb->start, address); + tlb->end =max (tlb->end, address + size); +}#endif /* HAVE_GENERIC_MMU_GATHER */ #ifdef CONFIG_HAVE_RCU_TABLE_FREE
net/ipv4/tcp_cubic.c +3 -2
@@ -340,8 +340,6 @@ static void bictcp_cong_avoid(struct sock *sk, u32 ack, u32 acked)return ;if (tcp_in_slow_start (tp)) { -if (hystart &&after (ack, ca->end_seq)) -bictcp_hystart_reset (sk); acked =tcp_slow_start (tp, acked);if (!acked)return ;
@@ -383,6 +381,9 @@ static void hystart_update(struct sock *sk, u32 delay)if (ca->found & hystart_detect)return ; +if (after (tp->snd_una, ca->end_seq)) +bictcp_hystart_reset (sk); +if (hystart_detect &HYSTART_ACK_TRAIN ) {u32 now =bictcp_clock ();
net/ipv6/ip6_output.c +1 -1
@@ -175,7 +175,7 @@ static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *s#if defined(CONFIG_NETFILTER ) && defined(CONFIG_XFRM )/* Policy lookup after SNAT yielded a new policy */ if (skb_dst (skb)->xfrm) { -IPCB (skb)->flags |=IPSKB_REROUTED ; +IP6CB (skb)->flags |=IP6SKB_REROUTED ;return dst_output (net, sk, skb); }#endif
net/netfilter/ipvs/ip_vs_core.c +4 -4
@@ -1850,7 +1850,6 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, intstruct ip_vs_proto_data *pd;struct ip_vs_conn *cp;int ret, pkts; -int conn_reuse_mode;struct sock *sk;/* Already marked as IPVS request or reply? */
@@ -1926,15 +1925,16 @@ ip_vs_in(struct netns_ipvs *ipvs, unsigned int hooknum, struct sk_buff *skb, int*/ cp = pp->conn_in_get (ipvs, af, skb, &iph); - conn_reuse_mode =sysctl_conn_reuse_mode (ipvs); -if (conn_reuse_mode && !iph.fragoffs &&is_new_conn (skb, &iph) && cp) { +if (!iph.fragoffs &&is_new_conn (skb, &iph) && cp) { +int conn_reuse_mode =sysctl_conn_reuse_mode (ipvs);bool old_ct = false, resched = false;if (unlikely (sysctl_expire_nodest_conn (ipvs)) && cp->dest &&unlikely (!atomic_read (&cp->dest->weight))) { resched = true; old_ct =ip_vs_conn_uses_old_conntrack (cp, skb); - }else if (is_new_conn_expected (cp, conn_reuse_mode)) { + }else if (conn_reuse_mode && +is_new_conn_expected (cp, conn_reuse_mode)) { old_ct =ip_vs_conn_uses_old_conntrack (cp, skb);if (!atomic_read (&cp->n_control)) { resched = true;
net/nfc/nci/core.c +17 -2
@@ -485,6 +485,11 @@ static int nci_open_device(struct nci_dev *ndev)mutex_lock (&ndev->req_lock); +if (test_bit (NCI_UNREG , &ndev->flags)) { + rc = -ENODEV ; + goto done; + } +if (test_bit (NCI_UP , &ndev->flags)) { rc = -EALREADY ; goto done;
@@ -548,6 +553,10 @@ static int nci_open_device(struct nci_dev *ndev)static int nci_close_device (struct nci_dev *ndev) {nci_req_cancel (ndev,ENODEV ); + +/* This mutex needs to be held as a barrier for +* caller nci_unregister_device +*/ mutex_lock (&ndev->req_lock);if (!test_and_clear_bit (NCI_UP , &ndev->flags)) {
@@ -585,8 +594,8 @@ static int nci_close_device(struct nci_dev *ndev)/* Flush cmd wq */ flush_workqueue (ndev->cmd_wq); -/* Clear flags */ - ndev->flags =0 ; +/* Clear flags except NCI_UNREG */ + ndev->flags &=BIT (NCI_UNREG );mutex_unlock (&ndev->req_lock);
@@ -1268,6 +1277,12 @@ void nci_unregister_device(struct nci_dev *ndev) {struct nci_conn_info *conn_info, *n; +/* This set_bit is not protected with specialized barrier, +* However, it is fine because the mutex_lock(&ndev->req_lock); +* in nci_close_device() will help to emit one. +*/ +set_bit (NCI_UNREG , &ndev->flags); +nci_close_device (ndev);destroy_workqueue (ndev->cmd_wq);
net/smc/af_smc.c +7 -1
@@ -1589,8 +1589,10 @@ static __poll_t smc_poll(struct file *file, struct socket *sock,static int smc_shutdown (struct socket *sock,int how) {struct sock *sk = sock->sk; +bool do_shutdown = true;struct smc_sock *smc;int rc = -EINVAL ; +int old_state;int rc1 =0 ; smc =smc_sk (sk);
@@ -1617,7 +1619,11 @@ static int smc_shutdown(struct socket *sock, int how) }switch (how) {case SHUT_RDWR :/* shutdown in both directions */ + old_state = sk->sk_state; rc =smc_close_active (smc); +if (old_state ==SMC_ACTIVE && + sk->sk_state ==SMC_PEERCLOSEWAIT1 ) + do_shutdown = false;break ;case SHUT_WR : rc =smc_close_shutdown_write (smc);
@@ -1627,7 +1633,7 @@ static int smc_shutdown(struct socket *sock, int how)/* nothing more to do because peer is not involved */ break ; } -if (smc->clcsock) +if (do_shutdown && smc->clcsock) rc1 =kernel_sock_shutdown (smc->clcsock, how);/* map sock_shutdown_cmd constants to sk_shutdown value range */ sk->sk_shutdown |= how +1 ;
net/smc/smc_close.c +6 -0
@@ -202,6 +202,12 @@ int smc_close_active(struct smc_sock *smc)if (rc)break ; sk->sk_state =SMC_PEERCLOSEWAIT1 ; + +/* actively shutdown clcsock before peer close it, +* prevent peer from entering TIME_WAIT state. +*/ +if (smc->clcsock && smc->clcsock->sk) + rc =kernel_sock_shutdown (smc->clcsock,SHUT_RDWR ); }else {/* peer event has changed the state */ goto again;
sound/pci/ctxfi/ctamixer.c +6 -8
@@ -27,16 +27,15 @@#define BLANK_SLOT 4094 -static int amixer_master (struct rsc *rsc) +static void amixer_master (struct rsc *rsc) { rsc->conj =0 ; - return rsc->idx = container_of(rsc, struct amixer, rsc)->idx[0]; + rsc->idx = container_of(rsc, struct amixer, rsc)->idx[0]; } -static int amixer_next_conj (struct rsc *rsc) +static void amixer_next_conj (struct rsc *rsc) { rsc->conj++; - return container_of(rsc, struct amixer, rsc)->idx[rsc->conj]; }static int amixer_index (const struct rsc *rsc)
@@ -335,16 +334,15 @@ int amixer_mgr_destroy(struct amixer_mgr *amixer_mgr)/* SUM resource management */ -static int sum_master (struct rsc *rsc) +static void sum_master (struct rsc *rsc) { rsc->conj =0 ; - return rsc->idx = container_of(rsc, struct sum, rsc)->idx[0]; + rsc->idx = container_of(rsc, struct sum, rsc)->idx[0]; } -static int sum_next_conj (struct rsc *rsc) +static void sum_next_conj (struct rsc *rsc) { rsc->conj++; - return container_of(rsc, struct sum, rsc)->idx[rsc->conj]; }static int sum_index (const struct rsc *rsc)
sound/pci/ctxfi/ctdaio.c +8 -8
@@ -55,12 +55,12 @@ static struct daio_rsc_idx idx_20k2[NUM_DAIOTYP] = { [SPDIFIO] = {.left = 0x05, .right = 0x85}, }; -static int daio_master (struct rsc *rsc) +static void daio_master (struct rsc *rsc) {/* Actually, this is not the resource index of DAIO. * For DAO, it is the input mapper index. And, for DAI, * it is the output time-slot index. */ -return rsc->conj = rsc->idx; + rsc->conj = rsc->idx; }static int daio_index (const struct rsc *rsc)
@@ -68,19 +68,19 @@ static int daio_index(const struct rsc *rsc)return rsc->conj; } -static int daio_out_next_conj (struct rsc *rsc) +static void daio_out_next_conj (struct rsc *rsc) { -return rsc->conj +=2 ; + rsc->conj +=2 ; } -static int daio_in_next_conj_20k1 (struct rsc *rsc) +static void daio_in_next_conj_20k1 (struct rsc *rsc) { -return rsc->conj +=0x200 ; + rsc->conj +=0x200 ; } -static int daio_in_next_conj_20k2 (struct rsc *rsc) +static void daio_in_next_conj_20k2 (struct rsc *rsc) { -return rsc->conj +=0x100 ; + rsc->conj +=0x100 ; }static const struct rsc_ops daio_out_rsc_ops = {
sound/pci/ctxfi/ctresource.c +3 -4
@@ -113,18 +113,17 @@ static int audio_ring_slot(const struct rsc *rsc)return (rsc->conj <<4 ) + offset_in_audio_slot_block[rsc->type]; } -static int rsc_next_conj (struct rsc *rsc) +static void rsc_next_conj (struct rsc *rsc) {unsigned int i;for (i =0 ; (i <8 ) && (!(rsc->msr & (0x1 << i))); ) i++; rsc->conj += (AUDIO_SLOT_BLOCK_NUM >> i); -return rsc->conj; } -static int rsc_master (struct rsc *rsc) +static void rsc_master (struct rsc *rsc) { -return rsc->conj = rsc->idx; + rsc->conj = rsc->idx; }static const struct rsc_ops rsc_generic_ops = {
sound/pci/ctxfi/ctresource.h +2 -2
@@ -43,8 +43,8 @@ struct rsc { };struct rsc_ops { -int (*master)(struct rsc *rsc);/* Move to master resource */ -int (*next_conj)(struct rsc *rsc);/* Move to next conjugate resource */ +void (*master)(struct rsc *rsc);/* Move to master resource */ +void (*next_conj)(struct rsc *rsc);/* Move to next conjugate resource */ int (*index)(const struct rsc *rsc);/* Return the index of resource */ /* Return the output slot number */ int (*output_slot)(const struct rsc *rsc);
sound/pci/ctxfi/ctsrc.c +3 -4
@@ -594,16 +594,15 @@ int src_mgr_destroy(struct src_mgr *src_mgr)/* SRCIMP resource manager operations */ -static int srcimp_master (struct rsc *rsc) +static void srcimp_master (struct rsc *rsc) { rsc->conj =0 ; - return rsc->idx = container_of(rsc, struct srcimp, rsc)->idx[0]; + rsc->idx = container_of(rsc, struct srcimp, rsc)->idx[0]; } -static int srcimp_next_conj (struct rsc *rsc) +static void srcimp_next_conj (struct rsc *rsc) { rsc->conj++; - return container_of(rsc, struct srcimp, rsc)->idx[rsc->conj]; }
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.