Linux 5.10.145
Greg Kroah-Hartman
maintainerI'm announcing the release of the 5.10.145 kernel.
All users of the 5.10 kernel series must upgrade.
The updated 5.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-5.10.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/mips/cavium-octeon/octeon-irq.c | 10 ++ arch/parisc/Kconfig | 10 ++ arch/parisc/include/asm/mmu_context.h | 7 + arch/parisc/include/asm/page.h | 2 arch/parisc/include/asm/pgalloc.h | 76 ++++------------- arch/parisc/include/asm/pgtable.h | 97 +++++---------------- arch/parisc/kernel/asm-offsets.c | 1 arch/parisc/kernel/cache.c | 4 arch/parisc/kernel/entry.S | 116 +++++++++++--------------- arch/parisc/mm/hugetlbpage.c | 13 -- arch/parisc/mm/init.c | 10 +- arch/powerpc/kvm/book3s_hv.c | 32 ++++++- arch/powerpc/kvm/booke.c | 16 +++ arch/powerpc/platforms/pseries/mobility.c | 77 ++++++++++------- drivers/dma/bestcomm/ata.c | 2 drivers/dma/bestcomm/bestcomm.c | 22 ++-- drivers/dma/bestcomm/fec.c | 4 drivers/dma/bestcomm/gen_bd.c | 4 drivers/gpio/gpio-mpc8xxx.c | 1 drivers/gpu/drm/meson/meson_plane.c | 2 drivers/gpu/drm/meson/meson_viu.c | 2 drivers/net/dsa/mv88e6xxx/chip.c | 64 +++++++------- drivers/net/usb/qmi_wwan.c | 1 drivers/net/wireless/mac80211_hwsim.c | 7 + drivers/of/fdt.c | 2 drivers/parisc/ccio-dma.c | 1 drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c | 2 drivers/platform/x86/intel-hid.c | 7 + drivers/regulator/pfuze100-regulator.c | 2 drivers/usb/cdns3/gadget.c | 20 ---- drivers/video/fbdev/i740fb.c | 3 drivers/video/fbdev/pxa3xx-gcu.c | 2 fs/afs/misc.c | 1 fs/cifs/file.c | 3 fs/cifs/transport.c | 4 fs/nfs/super.c | 27 ++++-- include/linux/of_device.h | 5 - kernel/cgroup/cgroup-v1.c | 2 kernel/trace/trace_preemptirq.c | 6 - net/rxrpc/call_event.c | 2 net/rxrpc/local_object.c | 3 scripts/mksysmap | 2 sound/pci/hda/hda_tegra.c | 3 sound/pci/hda/patch_sigmatel.c | 24 +++++ sound/soc/codecs/nau8824.c | 17 ++- tools/include/uapi/asm/errno.h | 4 47 files changed, 377 insertions(+), 347 deletions(-)
Alex Hung (1):
platform/x86/intel: hid: add quirk to support Surface Go 3
Alexander Sverdlin (1):
MIPS: OCTEON: irq: Fix octeon_irq_force_ciu_mapping()
Anatolij Gustschin (1):
dmaengine: bestcomm: fix system boot lockups
Ben Hutchings (1):
tools/include/uapi: Fix <asm/errno.h> for parisc and xtensa
David Howells (3):
rxrpc: Fix local destruction being repeated
rxrpc: Fix calc of resend age
afs: Return -EAGAIN, not -EREMOTEIO, when a file already locked
Frank Li (1):
usb: cdns3: gadget: fix new urb never complete if ep cancel previous requests
Greg Kroah-Hartman (1):
Linux 5.10.145
Helge Deller (1):
parisc: Optimize per-pagetable spinlocks
Hyunwoo Kim (1):
video: fbdev: pxa3xx-gcu: Fix integer overflow in pxa3xx_gcu_write
Johan Hovold (1):
Revert "serial: 8250: Fix reporting real baudrate value in c_ospeed field"
John David Anglin (1):
parisc: Flush kernel data mapping in set_pte_at() when installing pte for user page
Laurent Vivier (1):
KVM: PPC: Tick accounting should defer vtime accounting 'til after IRQ handling
Michael Wu (1):
pinctrl: sunxi: Fix name for A100 R_PIO
Mohan Kumar (1):
ALSA: hda/tegra: Align BDL entry to 4KB boundary
Nathan Lynch (2):
powerpc/pseries/mobility: refactor node lookup during DT update powerpc/pseries/mobility: ignore ibm, platform-facilities updates
Nicholas Piggin (1):
KVM: PPC: Book3S HV: Context tracking exit guest context before enabling irqs
Pali Rohár (2):
serial: 8250: Fix reporting real baudrate value in c_ospeed field
gpio: mpc8xxx: Fix support for IRQ_TYPE_LEVEL_LOW flow_type in mpc85xx
Ronnie Sahlberg (1):
cifs: revalidate mapping when doing direct writes
Russell King (Oracle) (1):
net: dsa: mv88e6xxx: allow use of PHYs on CPU and DSA ports
Sergey Shtylyov (1):
of: fdt: fix off-by-one error in unflatten_dt_nodes()
Soenke Huster (1):
wifi: mac80211_hwsim: check length for virtio packets
Stefan Metzmacher (1):
cifs: don't send down the destination address to sendmsg for a SOCK_STREAM
Stuart Menefy (2):
drm/meson: Correct OSD1 global alpha value drm/meson: Fix OSD1 RGB to YCbCr coefficient
Takashi Iwai (3):
ASoC: nau8824: Fix semaphore unbalance at error paths
ALSA: hda/sigmatel: Keep power up while beep is enabled
ALSA: hda/sigmatel: Fix unused variable warning for beep power change
Tetsuo Handa (1):
cgroup: Add missing cpus_read_lock() to cgroup_attach_task_all()
Thierry Reding (1):
of/device: Fix up of_dma_configure_id() stub
Trond Myklebust (1):
NFSv4: Turn off open-by-filehandle and NFS re-export for NFSv4.0
Xiaolei Wang (1):
regulator: pfuze100: Fix the global-out-of-bounds access in pfuze100_regulator_probe()
Yang Yingliang (1):
parisc: ccio-dma: Add missing iounmap in error path in ccio_probe()
Yipeng Zou (1):
tracing: hold caller_addr to hardirq_{enable,disable}_ip
Youling Tang (1):
mksysmap: Fix the mismatch of 'L0' symbols in System.map
Zheyu Ma (1):
video: fbdev: i740fb: Error out if 'pixclock' equals zero
jerry.meng (1):
net: usb: qmi_wwan: add Quectel RM520N
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 5 PATCHLEVEL = 10 -SUBLEVEL = 144 +SUBLEVEL = 145 EXTRAVERSION = NAME = Dare mighty things
arch/mips/cavium-octeon/octeon-irq.c +10 -0
@@ -127,6 +127,16 @@ static void octeon_irq_free_cd(struct irq_domain *d, unsigned int irq)static int octeon_irq_force_ciu_mapping (struct irq_domain *domain,int irq,int line,int bit) { +struct device_node *of_node; +int ret; + + of_node =irq_domain_get_of_node (domain); +if (!of_node) +return -EINVAL ; + ret =irq_alloc_desc_at (irq,of_node_to_nid (of_node)); +if (ret <0 ) +return ret; +return irq_domain_associate (domain, irq, line <<6 | bit); }
arch/parisc/Kconfig +10 -0
@@ -315,6 +315,16 @@ config IRQSTACKS for handling hard and soft interrupts. This can help avoid overflowing the process kernel stacks. +config TLB_PTLOCK + bool "Use page table locks in TLB fault handler" + depends on SMP + default n + help + Select this option to enable page table locking in the TLB + fault handler. This ensures that page table entries are + updated consistently on SMP machines at the expense of some + loss in performance. + config HOTPLUG_CPU bool default y if SMP
arch/parisc/include/asm/mmu_context.h +7 -0
@@ -5,6 +5,7 @@#include <linux/mm.h> #include <linux/sched.h> #include <linux/atomic.h> +#include <linux/spinlock.h> #include <asm-generic/mm_hooks.h> static inline void enter_lazy_tlb (struct mm_struct *mm,struct task_struct *tsk)
@@ -52,6 +53,12 @@ static inline void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next, struct task_struct *tsk) {if (prev != next) { +#ifdef CONFIG_TLB_PTLOCK +/* put physical address of page_table_lock in cr28 (tr4) +for TLB faults */ +spinlock_t *pgd_lock = &next->page_table_lock; +mtctl (__pa (__ldcw_align (&pgd_lock->rlock.raw_lock)),28 ); +#endif mtctl (__pa (next->pgd),25 );load_context (next->context); }
arch/parisc/include/asm/page.h +1 -1
@@ -112,7 +112,7 @@ extern int npmem_ranges;#else #define BITS_PER_PTE_ENTRY 2#define BITS_PER_PMD_ENTRY 2 -#define BITS_PER_PGD_ENTRY BITS_PER_PMD_ENTRY +#define BITS_PER_PGD_ENTRY 2#endif #define PGD_ENTRY_SIZE (1UL << BITS_PER_PGD_ENTRY)#define PMD_ENTRY_SIZE (1UL << BITS_PER_PMD_ENTRY)
arch/parisc/include/asm/pgalloc.h +18 -58
106 lines not on this page · raw message
arch/parisc/include/asm/pgtable.h +25 -72
194 lines not on this page · raw message
arch/parisc/kernel/asm-offsets.c +0 -1
@@ -268,7 +268,6 @@ int main(void)DEFINE (ASM_BITS_PER_PGD ,BITS_PER_PGD );DEFINE (ASM_BITS_PER_PMD ,BITS_PER_PMD );DEFINE (ASM_BITS_PER_PTE ,BITS_PER_PTE ); -DEFINE (ASM_PGD_PMD_OFFSET , -(PAGE_SIZE <<PGD_ORDER ));DEFINE (ASM_PMD_ENTRY , ((PAGE_OFFSET &PMD_MASK ) >>PMD_SHIFT ));DEFINE (ASM_PGD_ENTRY ,PAGE_OFFSET >>PGDIR_SHIFT );DEFINE (ASM_PGD_ENTRY_SIZE ,PGD_ENTRY_SIZE );
arch/parisc/kernel/cache.c +2 -2
@@ -83,9 +83,9 @@ EXPORT_SYMBOL(flush_cache_all_local);#define pfn_va (pfn) __va(PFN_PHYS(pfn))void -update_mmu_cache (struct vm_area_struct *vma,unsigned long address,pte_t *ptep) +__update_cache (pte_t pte) { -unsigned long pfn =pte_pfn (*ptep); +unsigned long pfn =pte_pfn (pte);struct page *page;/* We don't have pte special. As a result, we can be called with
arch/parisc/kernel/entry.S +51 -65
342 lines not on this page · raw message
arch/parisc/mm/hugetlbpage.c +0 -13
@@ -142,24 +142,17 @@ static void __set_huge_pte_at(struct mm_struct *mm, unsigned long addr,void set_huge_pte_at (struct mm_struct *mm,unsigned long addr,pte_t *ptep,pte_t entry) { -unsigned long flags; - -spin_lock_irqsave (pgd_spinlock ((mm)->pgd), flags);__set_huge_pte_at (mm, addr, ptep, entry); -spin_unlock_irqrestore (pgd_spinlock ((mm)->pgd), flags); }pte_t huge_ptep_get_and_clear (struct mm_struct *mm,unsigned long addr,pte_t *ptep) { -unsigned long flags;pte_t entry; -spin_lock_irqsave (pgd_spinlock ((mm)->pgd), flags); entry = *ptep;__set_huge_pte_at (mm, addr, ptep,__pte (0 )); -spin_unlock_irqrestore (pgd_spinlock ((mm)->pgd), flags);return entry; }
@@ -168,29 +161,23 @@ pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,void huge_ptep_set_wrprotect (struct mm_struct *mm,unsigned long addr,pte_t *ptep) { -unsigned long flags;pte_t old_pte; -spin_lock_irqsave (pgd_spinlock ((mm)->pgd), flags); old_pte = *ptep;__set_huge_pte_at (mm, addr, ptep,pte_wrprotect (old_pte)); -spin_unlock_irqrestore (pgd_spinlock ((mm)->pgd), flags); }int huge_ptep_set_access_flags (struct vm_area_struct *vma,unsigned long addr,pte_t *ptep,pte_t pte,int dirty) { -unsigned long flags;int changed;struct mm_struct *mm = vma->vm_mm; -spin_lock_irqsave (pgd_spinlock ((mm)->pgd), flags); changed = !pte_same (*ptep, pte);if (changed) {__set_huge_pte_at (mm, addr, ptep, pte); } -spin_unlock_irqrestore (pgd_spinlock ((mm)->pgd), flags);return changed; }
arch/parisc/mm/init.c +5 -5
@@ -37,11 +37,6 @@ extern int data_start;extern void parisc_kernel_start (void );/* Kernel entry point in head.S */ #if CONFIG_PGTABLE_LEVELS ==3 -/* NOTE: This layout exactly conforms to the hybrid L2/L3 page table layout -* with the first pmd adjacent to the pgd and below it. gcc doesn't actually -* guarantee that global objects will be laid out in memory in the same order -* as the order of declaration, so put these in different sections and use -* the linker script to order them. */ pmd_t pmd0[PTRS_PER_PMD] __section(".data..vm0.pmd") __attribute__ ((aligned(PAGE_SIZE)));#endif
@@ -558,6 +553,11 @@ void __init mem_init(void)BUILD_BUG_ON (PGD_ENTRY_SIZE !=sizeof (pgd_t));BUILD_BUG_ON (PAGE_SHIFT +BITS_PER_PTE +BITS_PER_PMD +BITS_PER_PGD >BITS_PER_LONG ); +#if CONFIG_PGTABLE_LEVELS ==3 +BUILD_BUG_ON (PT_INITIAL >PTRS_PER_PMD ); +#else +BUILD_BUG_ON (PT_INITIAL >PTRS_PER_PGD ); +#endif high_memory =__va ((max_pfn <<PAGE_SHIFT ));set_max_mapnr (max_low_pfn);
arch/powerpc/kvm/book3s_hv.c +30 -2
@@ -3399,8 +3399,22 @@ static noinline void kvmppc_run_core(struct kvmppc_vcore *vc)kvmppc_set_host_core (pcpu); +context_tracking_guest_exit (); +if (!vtime_accounting_enabled_this_cpu ()) { +local_irq_enable (); +/* +* Service IRQs here before vtime_account_guest_exit() so any +* ticks that occurred while running the guest are accounted to +* the guest. If vtime accounting is enabled, accounting uses +* TB rather than ticks, so it can be done without enabling +* interrupts here, which has the problem that it accounts +* interrupt processing overhead to the host. +*/ +local_irq_disable (); + } +vtime_account_guest_exit (); +local_irq_enable (); -guest_exit ();/* Let secondaries go back to the offline loop */ for (i =0 ; i < controlled_threads; ++i) {
@@ -4235,8 +4249,22 @@ int kvmhv_run_single_vcpu(struct kvm_vcpu *vcpu, u64 time_limit,kvmppc_set_host_core (pcpu); +context_tracking_guest_exit (); +if (!vtime_accounting_enabled_this_cpu ()) { +local_irq_enable (); +/* +* Service IRQs here before vtime_account_guest_exit() so any +* ticks that occurred while running the guest are accounted to +* the guest. If vtime accounting is enabled, accounting uses +* TB rather than ticks, so it can be done without enabling +* interrupts here, which has the problem that it accounts +* interrupt processing overhead to the host. +*/ +local_irq_disable (); + } +vtime_account_guest_exit (); +local_irq_enable (); -guest_exit ();cpumask_clear_cpu (pcpu, &kvm->arch.cpu_in_guest);
arch/powerpc/kvm/booke.c +15 -1
@@ -1016,7 +1016,21 @@ int kvmppc_handle_exit(struct kvm_vcpu *vcpu, unsigned int exit_nr) }trace_kvm_exit (exit_nr, vcpu); -guest_exit_irqoff (); + +context_tracking_guest_exit (); +if (!vtime_accounting_enabled_this_cpu ()) { +local_irq_enable (); +/* +* Service IRQs here before vtime_account_guest_exit() so any +* ticks that occurred while running the guest are accounted to +* the guest. If vtime accounting is enabled, accounting uses +* TB rather than ticks, so it can be done without enabling +* interrupts here, which has the problem that it accounts +* interrupt processing overhead to the host. +*/ +local_irq_disable (); + } +vtime_account_guest_exit ();local_irq_enable ();
arch/powerpc/platforms/pseries/mobility.c +48 -29
144 lines not on this page · raw message
drivers/dma/bestcomm/ata.c +1 -1
@@ -133,7 +133,7 @@ void bcom_ata_reset_bd(struct bcom_task *tsk)struct bcom_ata_var *var;/* Reset all BD */ -memset (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size); +memset_io (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size); tsk->index =0 ; tsk->outdex =0 ;
drivers/dma/bestcomm/bestcomm.c +11 -11
@@ -95,7 +95,7 @@ bcom_task_alloc(int bd_count, int bd_size, int priv_size) tsk->bd =bcom_sram_alloc (bd_count * bd_size,4 , &tsk->bd_pa);if (!tsk->bd) goto error; -memset (tsk->bd,0x00 , bd_count * bd_size); +memset_io (tsk->bd,0x00 , bd_count * bd_size); tsk->num_bd = bd_count; tsk->bd_size = bd_size;
@@ -186,16 +186,16 @@ bcom_load_image(int task, u32 *task_image) inc =bcom_task_inc (task);/* Clear & copy */ -memset (var,0x00 ,BCOM_VAR_SIZE ); -memset (inc,0x00 ,BCOM_INC_SIZE ); +memset_io (var,0x00 ,BCOM_VAR_SIZE ); +memset_io (inc,0x00 ,BCOM_INC_SIZE ); desc_src = (u32 *)(hdr +1 ); var_src = desc_src + hdr->desc_size; inc_src = var_src + hdr->var_size; -memcpy (desc, desc_src, hdr->desc_size *sizeof (u32)); -memcpy (var + hdr->first_var, var_src, hdr->var_size *sizeof (u32)); -memcpy (inc, inc_src, hdr->inc_size *sizeof (u32)); +memcpy_toio (desc, desc_src, hdr->desc_size *sizeof (u32)); +memcpy_toio (var + hdr->first_var, var_src, hdr->var_size *sizeof (u32)); +memcpy_toio (inc, inc_src, hdr->inc_size *sizeof (u32));return 0 ; }
@@ -302,13 +302,13 @@ static int bcom_engine_init(void)return -ENOMEM ; } -memset (bcom_eng->tdt,0x00 , tdt_size); -memset (bcom_eng->ctx,0x00 , ctx_size); -memset (bcom_eng->var,0x00 , var_size); -memset (bcom_eng->fdt,0x00 , fdt_size); +memset_io (bcom_eng->tdt,0x00 , tdt_size); +memset_io (bcom_eng->ctx,0x00 , ctx_size); +memset_io (bcom_eng->var,0x00 , var_size); +memset_io (bcom_eng->fdt,0x00 , fdt_size);/* Copy the FDT for the EU#3 */ -memcpy (&bcom_eng->fdt[48 ], fdt_ops,sizeof (fdt_ops)); +memcpy_toio (&bcom_eng->fdt[48 ], fdt_ops,sizeof (fdt_ops));/* Initialize Task base structure */ for (task=0 ; task<BCOM_MAX_TASKS ; task++)
drivers/dma/bestcomm/fec.c +2 -2
@@ -140,7 +140,7 @@ bcom_fec_rx_reset(struct bcom_task *tsk) tsk->index =0 ; tsk->outdex =0 ; -memset (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size); +memset_io (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size);/* Configure some stuff */ bcom_set_task_pragma (tsk->tasknum,BCOM_FEC_RX_BD_PRAGMA );
@@ -241,7 +241,7 @@ bcom_fec_tx_reset(struct bcom_task *tsk) tsk->index =0 ; tsk->outdex =0 ; -memset (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size); +memset_io (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size);/* Configure some stuff */ bcom_set_task_pragma (tsk->tasknum,BCOM_FEC_TX_BD_PRAGMA );
drivers/dma/bestcomm/gen_bd.c +2 -2
@@ -142,7 +142,7 @@ bcom_gen_bd_rx_reset(struct bcom_task *tsk) tsk->index =0 ; tsk->outdex =0 ; -memset (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size); +memset_io (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size);/* Configure some stuff */ bcom_set_task_pragma (tsk->tasknum,BCOM_GEN_RX_BD_PRAGMA );
@@ -226,7 +226,7 @@ bcom_gen_bd_tx_reset(struct bcom_task *tsk) tsk->index =0 ; tsk->outdex =0 ; -memset (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size); +memset_io (tsk->bd,0x00 , tsk->num_bd * tsk->bd_size);/* Configure some stuff */ bcom_set_task_pragma (tsk->tasknum,BCOM_GEN_TX_BD_PRAGMA );
drivers/gpio/gpio-mpc8xxx.c +1 -0
@@ -169,6 +169,7 @@ static int mpc8xxx_irq_set_type(struct irq_data *d, unsigned int flow_type)switch (flow_type) {case IRQ_TYPE_EDGE_FALLING : +case IRQ_TYPE_LEVEL_LOW :raw_spin_lock_irqsave (&mpc8xxx_gc->lock, flags); gc->write_reg (mpc8xxx_gc->regs +GPIO_ICR , gc->read_reg(mpc8xxx_gc->regs + GPIO_ICR)
drivers/gpu/drm/meson/meson_plane.c +1 -1
@@ -163,7 +163,7 @@ static void meson_plane_atomic_update(struct drm_plane *plane,/* Enable OSD and BLK0, set max global alpha */ priv->viu.osd1_ctrl_stat =OSD_ENABLE | - (0xFF <<OSD_GLOBAL_ALPHA_SHIFT ) | + (0x100 <<OSD_GLOBAL_ALPHA_SHIFT ) |OSD_BLK0_ENABLE ; priv->viu.osd1_ctrl_stat2 = readl(priv->io_base +
drivers/gpu/drm/meson/meson_viu.c +1 -1
@@ -94,7 +94,7 @@ static void meson_viu_set_g12a_osd1_matrix(struct meson_drm *priv, priv->io_base + _REG(VPP_WRAP_OSD1_MATRIX_COEF11_12));writel (((m[9 ] &0x1fff ) <<16 ) | (m[10 ] &0x1fff ), priv->io_base +_REG (VPP_WRAP_OSD1_MATRIX_COEF20_21 )); -writel ((m[11 ] &0x1fff ) <<16 , +writel ((m[11 ] &0x1fff ), priv->io_base +_REG (VPP_WRAP_OSD1_MATRIX_COEF22 )); writel(((m[18] & 0xfff) << 16) | (m[19] & 0xfff),
drivers/net/dsa/mv88e6xxx/chip.c +34 -30
78 lines not on this page · raw message
drivers/net/usb/qmi_wwan.c +1 -0
@@ -1024,6 +1024,7 @@ static const struct usb_device_id products[] = { {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0512)}, /* Quectel EG12/EM12 */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0620)}, /* Quectel EM160R-GL */ {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0800)}, /* Quectel RM500Q-GL */ + {QMI_MATCH_FF_FF_FF(0x2c7c, 0x0801)}, /* Quectel RM520N *//* 3. Combined interface devices matching on interface number */ {QMI_FIXED_INTF(0x0408, 0xea42, 4)}, /* Yota / Megafon M100-1 */
drivers/net/wireless/mac80211_hwsim.c +6 -1
@@ -4209,6 +4209,10 @@ static int hwsim_virtio_handle_cmd(struct sk_buff *skb) nlh =nlmsg_hdr (skb); gnlh =nlmsg_data (nlh); + +if (skb->len < nlh->nlmsg_len) +return -EINVAL ; + err =genlmsg_parse (nlh, &hwsim_genl_family, tb,HWSIM_ATTR_MAX , hwsim_genl_policy,NULL );if (err) {
@@ -4251,7 +4255,8 @@ static void hwsim_virtio_rx_work(struct work_struct *work)spin_unlock_irqrestore (&hwsim_virtio_lock, flags); skb->data = skb->head; -skb_set_tail_pointer (skb, len); +skb_reset_tail_pointer (skb); +skb_put (skb, len);hwsim_virtio_handle_cmd (skb);spin_lock_irqsave (&hwsim_virtio_lock, flags);
drivers/of/fdt.c +1 -1
@@ -315,7 +315,7 @@ static int unflatten_dt_nodes(const void *blob,for (offset =0 ; offset >=0 && depth >= initial_depth; offset =fdt_next_node (blob, offset, &depth)) { -if (WARN_ON_ONCE (depth >=FDT_MAX_DEPTH )) +if (WARN_ON_ONCE (depth >=FDT_MAX_DEPTH -1 ))continue ; if (!IS_ENABLED(CONFIG_OF_KOBJ) &&
drivers/parisc/ccio-dma.c +1 -0
@@ -1546,6 +1546,7 @@ static int __init ccio_probe(struct parisc_device *dev) }ccio_ioc_init (ioc);if (ccio_init_resources (ioc)) { +iounmap (ioc->ioc_regs);kfree (ioc);return -ENOMEM ; }
drivers/pinctrl/sunxi/pinctrl-sun50i-a100-r.c +1 -1
@@ -98,7 +98,7 @@ MODULE_DEVICE_TABLE(of, a100_r_pinctrl_match);static struct platform_driver a100_r_pinctrl_driver = { .probe = a100_r_pinctrl_probe, .driver = { - .name ="sun50iw10p1-r-pinctrl" , + .name ="sun50i-a100-r-pinctrl" , .of_match_table = a100_r_pinctrl_match, }, };
drivers/platform/x86/intel-hid.c +7 -0
@@ -93,6 +93,13 @@ static const struct dmi_system_id button_array_table[] = { DMI_MATCH(DMI_PRODUCT_FAMILY, "ThinkPad X1 Tablet Gen 2"), }, }, + { + .ident = "Microsoft Surface Go 3", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), + DMI_MATCH(DMI_PRODUCT_NAME, "Surface Go 3"), + }, + }, { } };
drivers/regulator/pfuze100-regulator.c +1 -1
@@ -791,7 +791,7 @@ static int pfuze100_regulator_probe(struct i2c_client *client, ((pfuze_chip->chip_id == PFUZE3000) ? "3000" : "3001"))));memcpy (pfuze_chip->regulator_descs, pfuze_chip->pfuze_regulators, -sizeof (pfuze_chip->regulator_descs)); + regulator_num *sizeof (struct pfuze_regulator )); ret =pfuze_parse_regulators_dt (pfuze_chip);if (ret)
drivers/usb/cdns3/gadget.c +4 -16
@@ -352,19 +352,6 @@ static void cdns3_ep_inc_deq(struct cdns3_endpoint *priv_ep)cdns3_ep_inc_trb (&priv_ep->dequeue, &priv_ep->ccs, priv_ep->num_trbs); } -static void cdns3_move_deq_to_next_trb (struct cdns3_request *priv_req) -{ -struct cdns3_endpoint *priv_ep = priv_req->priv_ep; -int current_trb = priv_req->start_trb; - -while (current_trb != priv_req->end_trb) { -cdns3_ep_inc_deq (priv_ep); - current_trb = priv_ep->dequeue; - } - -cdns3_ep_inc_deq (priv_ep); -} -/** * cdns3_allow_enable_l1 - enable/disable permits to transition to L1. * @priv_dev: Extended gadget object
@@ -1518,10 +1505,11 @@ static void cdns3_transfer_completed(struct cdns3_device *priv_dev, trb = priv_ep->trb_pool + priv_ep->dequeue; -/* Request was dequeued and TRB was changed to TRB_LINK. */ -if (TRB_FIELD_TO_TYPE (le32_to_cpu (trb->control)) ==TRB_LINK ) { +/* The TRB was changed as link TRB, and the request was handled at ep_dequeue */ +while (TRB_FIELD_TO_TYPE (le32_to_cpu (trb->control)) ==TRB_LINK ) {trace_cdns3_complete_trb (priv_ep, trb); -cdns3_move_deq_to_next_trb (priv_req); +cdns3_ep_inc_deq (priv_ep); + trb = priv_ep->trb_pool + priv_ep->dequeue; }if (!request->stream_id) {
drivers/video/fbdev/i740fb.c +3 -0
@@ -662,6 +662,9 @@ static int i740fb_decode_var(const struct fb_var_screeninfo *var,static int i740fb_check_var (struct fb_var_screeninfo *var,struct fb_info *info) { +if (!var->pixclock) +return -EINVAL ; +switch (var->bits_per_pixel) {case 8 : var->red.offset = var->green.offset = var->blue.offset =0 ;
drivers/video/fbdev/pxa3xx-gcu.c +1 -1
@@ -381,7 +381,7 @@ pxa3xx_gcu_write(struct file *file, const char *buff,struct pxa3xx_gcu_batch *buffer;struct pxa3xx_gcu_priv *priv =to_pxa3xx_gcu_priv (file); -int words = count /4 ; +size_t words = count /4 ;/* Does not need to be atomic. There's a lock in user space, * but anyhow, this is just for statistics. */
fs/afs/misc.c +1 -0
@@ -69,6 +69,7 @@ int afs_abort_to_error(u32 abort_code)/* Unified AFS error table */ case UAEPERM :return -EPERM ;case UAENOENT :return -ENOENT ; +case UAEAGAIN :return -EAGAIN ;case UAEACCES :return -EACCES ;case UAEBUSY :return -EBUSY ;case UAEEXIST :return -EEXIST ;
fs/cifs/file.c +3 -0
@@ -3244,6 +3244,9 @@ static ssize_t __cifs_writev(ssize_t cifs_direct_writev (struct kiocb *iocb,struct iov_iter *from) { +struct file *file = iocb->ki_filp; + +cifs_revalidate_mapping (file->f_inode);return __cifs_writev (iocb, from, true); }
fs/cifs/transport.c +2 -2
@@ -209,8 +209,8 @@ smb_send_kvec(struct TCP_Server_Info *server, struct msghdr *smb_msg, *sent =0 ; - smb_msg->msg_name = (struct sockaddr *) &server->dstaddr; - smb_msg->msg_namelen =sizeof (struct sockaddr ); + smb_msg->msg_name =NULL ; + smb_msg->msg_namelen =0 ; smb_msg->msg_control =NULL ; smb_msg->msg_controllen =0 ;if (server->noblocksnd)
fs/nfs/super.c +18 -9
@@ -1029,22 +1029,31 @@ static void nfs_fill_super(struct super_block *sb, struct nfs_fs_context *ctx)if (ctx && ctx->bsize) sb->s_blocksize =nfs_block_size (ctx->bsize, &sb->s_blocksize_bits); -if (server->nfs_client->rpc_ops->version !=2 ) { -/* The VFS shouldn't apply the umask to mode bits. We will do -* so ourselves when necessary. +switch (server->nfs_client->rpc_ops->version) { +case 2 : + sb->s_time_gran =1000 ; + sb->s_time_min =0 ; + sb->s_time_max =U32_MAX ; +break ; +case 3 : +/* +* The VFS shouldn't apply the umask to mode bits. +* We will do so ourselves when necessary. */ sb->s_flags |=SB_POSIXACL ; sb->s_time_gran =1 ; - sb->s_export_op = &nfs_export_ops; - }else - sb->s_time_gran =1000 ; - -if (server->nfs_client->rpc_ops->version !=4 ) { sb->s_time_min =0 ; sb->s_time_max =U32_MAX ; - }else { + sb->s_export_op = &nfs_export_ops; +break ; +case 4 : + sb->s_flags |=SB_POSIXACL ; + sb->s_time_gran =1 ; sb->s_time_min =S64_MIN ; sb->s_time_max =S64_MAX ; +if (server->caps &NFS_CAP_ATOMIC_OPEN_V1 ) + sb->s_export_op = &nfs_export_ops; +break ; } sb->s_magic =NFS_SUPER_MAGIC ;
include/linux/of_device.h +3 -2
@@ -113,8 +113,9 @@ static inline struct device_node *of_cpu_device_node_get(int cpu) }static inline int of_dma_configure_id (struct device *dev, -struct device_node *np, -bool force_dma) +struct device_node *np, +bool force_dma, +const u32 *id) {return 0 ; }
kernel/cgroup/cgroup-v1.c +2 -0
@@ -57,6 +57,7 @@ int cgroup_attach_task_all(struct task_struct *from, struct task_struct *tsk)int retval =0 ;mutex_lock (&cgroup_mutex); +cpus_read_lock ();percpu_down_write (&cgroup_threadgroup_rwsem);for_each_root (root) {struct cgroup *from_cgrp;
@@ -73,6 +74,7 @@ int cgroup_attach_task_all(struct task_struct *from, struct task_struct *tsk)break ; }percpu_up_write (&cgroup_threadgroup_rwsem); +cpus_read_unlock ();mutex_unlock (&cgroup_mutex);return retval;
kernel/trace/trace_preemptirq.c +3 -3
@@ -94,15 +94,15 @@ __visible void trace_hardirqs_on_caller(unsigned long caller_addr)this_cpu_write (tracing_irq_cpu,0 ); } -lockdep_hardirqs_on_prepare (CALLER_ADDR0 ); -lockdep_hardirqs_on (CALLER_ADDR0 ); +lockdep_hardirqs_on_prepare (caller_addr); +lockdep_hardirqs_on (caller_addr); }EXPORT_SYMBOL (trace_hardirqs_on_caller);NOKPROBE_SYMBOL (trace_hardirqs_on_caller); __visible void trace_hardirqs_off_caller(unsigned long caller_addr) { -lockdep_hardirqs_off (CALLER_ADDR0 ); +lockdep_hardirqs_off (caller_addr);if (!this_cpu_read (tracing_irq_cpu)) {this_cpu_write (tracing_irq_cpu,1 );
net/rxrpc/call_event.c +1 -1
@@ -166,7 +166,7 @@ static void rxrpc_resend(struct rxrpc_call *call, unsigned long now_j)_enter ("{%d,%d}" , call->tx_hard_ack, call->tx_top); now =ktime_get_real (); - max_age =ktime_sub (now,jiffies_to_usecs (call->peer->rto_j)); + max_age =ktime_sub_us (now,jiffies_to_usecs (call->peer->rto_j));spin_lock_bh (&call->lock);
net/rxrpc/local_object.c +3 -0
@@ -424,6 +424,9 @@ static void rxrpc_local_processor(struct work_struct *work) container_of(work, struct rxrpc_local, processor);bool again; +if (local->dead) +return ; +trace_rxrpc_local (local->debug_id, rxrpc_local_processing,atomic_read (&local->usage),NULL );
scripts/mksysmap +1 -1
@@ -41,4 +41,4 @@ # so we just ignore them to let readprofile continue to work. # (At least sparc64 has __crc_ in the middle). -$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)' > $2 +$NM -n $1 | grep -v '\( [aNUw] \)\|\(__crc_\)\|\( \$[adt]\)\|\( \.L\)\|\( L0\)' > $2
sound/pci/hda/hda_tegra.c +2 -1
@@ -479,7 +479,8 @@ MODULE_DEVICE_TABLE(of, hda_tegra_match);static int hda_tegra_probe (struct platform_device *pdev) {const unsigned int driver_flags =AZX_DCAPS_CORBRP_SELF_CLEAR | -AZX_DCAPS_PM_RUNTIME ; +AZX_DCAPS_PM_RUNTIME | +AZX_DCAPS_4K_BDLE_BOUNDARY ;struct snd_card *card;struct azx *chip;struct hda_tegra *hda;
sound/pci/hda/patch_sigmatel.c +24 -0
@@ -209,6 +209,7 @@ struct sigmatel_spec {/* beep widgets */ hda_nid_t anabeep_nid; +bool beep_power_on;/* SPDIF-out mux */ const char *const *spdif_labels;
@@ -4447,6 +4448,28 @@ static int stac_suspend(struct hda_codec *codec)stac_shutup (codec); return 0; } + +static int stac_check_power_status (struct hda_codec *codec,hda_nid_t nid) +{ +#ifdef CONFIG_SND_HDA_INPUT_BEEP +struct sigmatel_spec *spec = codec->spec; +#endif +int ret =snd_hda_gen_check_power_status (codec, nid); + +#ifdef CONFIG_SND_HDA_INPUT_BEEP +if (nid == spec->gen.beep_nid && codec->beep) { +if (codec->beep->enabled != spec->beep_power_on) { + spec->beep_power_on = codec->beep->enabled; +if (spec->beep_power_on) +snd_hda_power_up_pm (codec); +else +snd_hda_power_down_pm (codec); + } + ret |= spec->beep_power_on; + } +#endif +return ret; +}#else #define stac_suspend NULL#endif /* CONFIG_PM */
@@ -4459,6 +4482,7 @@ static const struct hda_codec_ops stac_patch_ops = { .unsol_event = snd_hda_jack_unsol_event, #ifdef CONFIG_PM .suspend = stac_suspend, + .check_power_status = stac_check_power_status, #endif .reboot_notify = stac_shutup, };
sound/soc/codecs/nau8824.c +10 -7
@@ -1072,6 +1072,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,struct snd_soc_component *component = dai->component;struct nau8824 *nau8824 =snd_soc_component_get_drvdata (component);unsigned int val_len =0 , osr, ctrl_val, bclk_fs, bclk_div; +int err = -EINVAL ;nau8824_sema_acquire (nau8824,HZ );
@@ -1088,7 +1089,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream, osr &=NAU8824_DAC_OVERSAMPLE_MASK ;if (nau8824_clock_check (nau8824, substream->stream, nau8824->fs, osr)) -return -EINVAL ; + goto error;regmap_update_bits (nau8824->regmap,NAU8824_REG_CLK_DIVIDER ,NAU8824_CLK_DAC_SRC_MASK , osr_dac_sel[osr].clk_src <<NAU8824_CLK_DAC_SRC_SFT );
@@ -1098,7 +1099,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream, osr &=NAU8824_ADC_SYNC_DOWN_MASK ;if (nau8824_clock_check (nau8824, substream->stream, nau8824->fs, osr)) -return -EINVAL ; + goto error;regmap_update_bits (nau8824->regmap,NAU8824_REG_CLK_DIVIDER ,NAU8824_CLK_ADC_SRC_MASK , osr_adc_sel[osr].clk_src <<NAU8824_CLK_ADC_SRC_SFT );
@@ -1119,7 +1120,7 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream,else if (bclk_fs <=256 ) bclk_div =0 ;else -return -EINVAL ; + goto error; regmap_update_bits(nau8824->regmap, NAU8824_REG_PORT0_I2S_PCM_CTRL_2, NAU8824_I2S_LRC_DIV_MASK | NAU8824_I2S_BLK_DIV_MASK,
@@ -1140,15 +1141,17 @@ static int nau8824_hw_params(struct snd_pcm_substream *substream, val_len |=NAU8824_I2S_DL_32 ;break ;default : -return -EINVAL ; + goto error; }regmap_update_bits (nau8824->regmap,NAU8824_REG_PORT0_I2S_PCM_CTRL_1 ,NAU8824_I2S_DL_MASK , val_len); + err =0 ; + error:nau8824_sema_release (nau8824); -return 0 ; +return err; }static int nau8824_set_fmt (struct snd_soc_dai *dai,unsigned int fmt)
@@ -1157,8 +1160,6 @@ static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)struct nau8824 *nau8824 =snd_soc_component_get_drvdata (component);unsigned int ctrl1_val =0 , ctrl2_val =0 ; -nau8824_sema_acquire (nau8824,HZ ); -switch (fmt &SND_SOC_DAIFMT_MASTER_MASK ) {case SND_SOC_DAIFMT_CBM_CFM : ctrl2_val |=NAU8824_I2S_MS_MASTER ;
@@ -1200,6 +1201,8 @@ static int nau8824_set_fmt(struct snd_soc_dai *dai, unsigned int fmt)return -EINVAL ; } +nau8824_sema_acquire (nau8824,HZ ); +regmap_update_bits (nau8824->regmap,NAU8824_REG_PORT0_I2S_PCM_CTRL_1 ,NAU8824_I2S_DF_MASK |NAU8824_I2S_BP_MASK |NAU8824_I2S_PCMB_EN , ctrl1_val);
tools/include/uapi/asm/errno.h +2 -2
@@ -9,8 +9,8 @@#include "../../../arch/alpha/include/uapi/asm/errno.h" #elif defined(__mips__)#include "../../../arch/mips/include/uapi/asm/errno.h" -#elif defined(__xtensa__) -#include "../../../arch/xtensa/include/uapi/asm/errno.h" +#elif defined(__hppa__) +#include "../../../arch/parisc/include/uapi/asm/errno.h" #else #include <asm-generic/errno.h> #endif